星期五, 9月 27, 2013

2013IT鐵人賽-12-git03-git基礎練習git show 與 git diff

2013IT鐵人賽-12-git03-git基礎練習git show 與 git diff




在之前的兩篇文章( 2013IT鐵人賽-03-程式學習紀錄-git01-使用git與GitHub紀錄 / 2013IT鐵人賽-08-git02-git線上學習體驗小記 )我們有介紹 git 的基本操作, 還有在一些文章內將我們的檔案上傳到 GitHub 上面.


先來回憶一下自己之前 git 的相關操作
* 安裝 git 套件
* git  init (初始化容器)
* git  config  --global  user.name   (設定使用者名稱)
* git  config  --global  user.email   (設定電子郵件)
* git  add  (將檔案加入 git )
* git  commit  (送交檔案)
* git  remote add (加入遠端的repo)
* git  push  origin  master  (將檔案 push  到遠端)
* git  clone (拷貝容器)


今天就來針對 git 相關基礎與指令來加強
本次練習還是使用 EasyCloud 的 VM 來練習, 並聯接終端機來操作.


首先我們來看看如何檢視送交紀錄


檢視送交紀錄
  • git  log
    • 依照時間順序列出
  • git   show  辨識碼
    • 如果沒有加上辨識碼, 則顯示最近一筆紀錄
  • git  show-branch
    • 顯示目前開發分支
    • 如果不下任何參數, 只顯示最近的送交
    • 可以加上 --more=10 最多顯示 10 個版本


練習如下
當執行 git log 指令時, 會依照時間順序列出, 新的commit 會在前面
#git   log
commit abde3038192a451df96753e6c0790a9ab1817684
Author: Max Huang <sakana@cycu.org.tw>
Date:   Fri Sep 20 22:38:58 2013 +0800


   Fix and add java exercise file


commit 6e5cccb2dea713e208695834916dd82eaf484228
Author: Max Huang <sakana@cycu.org.tw>
Date:   Tue Sep 17 23:46:27 2013 +0800


   Fix some error in ri20min.rb, thanks David


commit ae480c44482683d7c07934d8cd5494957e33b096
Author: Max Huang <sakana@cycu.org.tw>
Date:   Mon Sep 16 01:45:13 2013 +0800


   Add java exercise files


commit 97880695ad234a700132c2bba6d4b45c3c6ca72c
Author: Max Huang <sakana@cycu.org.tw>
Date:   Thu Sep 12 16:31:27 2013 +0800


   Fix some typo in  ri20min.rb


commit e8c460a57dc12521b92ee0f99a0fcad87215c0e6
Author: Max Huang <sakana@cycu.org.tw>
Date:   Thu Sep 12 16:29:11 2013 +0800


   Finish vi ri20min.rb origin


使用 git show 指令如果沒有加上識別碼, 會顯示最近一筆的紀錄
#git  show
commit abde3038192a451df96753e6c0790a9ab1817684
Author: Max Huang <sakana@cycu.org.tw>
Date:   Fri Sep 20 22:38:58 2013 +0800


   Fix and add java exercise file


diff --git a/java/Basic_001_Helloworld.class b/java/Basic_001_Helloworld.class
new file mode 100644
index 0000000..71d7c7f
Binary files /dev/null and b/java/Basic_001_Helloworld.class differ
diff --git a/java/Basic_001_Helloworld.java b/java/Basic_001_Helloworld.java
new file mode 100644
index 0000000..912c8e4
--- /dev/null
+++ b/java/Basic_001_Helloworld.java
@@ -0,0 +1,6 @@
+class Basic_001_Helloworld {
+       public static void main(String[] args){
+               System.out.println("Goodbye, World");
+       }
+
+}
diff --git a/java/Basic_002_javaStructure.class b/java/Basic_002_javaStructure.class
new file mode 100644
index 0000000..0cbdb35
Binary files /dev/null and b/java/Basic_002_javaStructure.class differ
diff --git a/java/Basic_002_javaStructure.java b/java/Basic_002_javaStructure.java
new file mode 100644
index 0000000..bd6eaa1
...以下省略


所以也可以加上識別碼的方式來檢視, 例如以下


# git   show   ae480c44482683d7c07934d8cd5494957e33b096
commit ae480c44482683d7c07934d8cd5494957e33b096
Author: Max Huang <sakana@cycu.org.tw>
Date:   Mon Sep 16 01:45:13 2013 +0800


   Add java exercise files


diff --git a/java/helloworld.class b/java/helloworld.class
new file mode 100644
index 0000000..a608491
Binary files /dev/null and b/java/helloworld.class differ
diff --git a/java/helloworld.java b/java/helloworld.java
new file mode 100644
index 0000000..1ff1d76
--- /dev/null
+++ b/java/helloworld.java
@@ -0,0 +1,6 @@
+class helloworld {
+       public static void main(String[] args){
+               System.out.println("Goodbye, World");
+       }
+
+}


使用 git  show-branch  顯示開發的分支
# git   show-branch
[master] Fix and add java exercise file


不過因為我們目前沒有分支, 所以只會顯示 master 然後顯示最近的送交(commit)  :-)
我們可以透過  --more= 的參數來顯示多一點的版本資訊


# git  show-branch --more=10
[master] Fix and add java exercise file
[master^] Fix some error in ri20min.rb, thanks David
[master~2] Add java exercise files
[master~3] Fix some typo in  ri20min.rb
[master~4] Finish vi ri20min.rb origin
[master~5] vi ri20min.rb
[master~6] Add ruby 20min exercise file
[master~7] first  commit


接下來我們來討輪不同送交(commit) 的差異, 我們可以透過 git  diff 指令來執行


比較不同送交的差異
  • git  diff  辨識碼   辨識碼  


藉由上面的版本資訊, 我們可以知道 [master~3] 是去改正[master~4] 內的ri20min.rb的一些錯誤
首先我們來使用git  log 指令觀察送交資訊並取得識別碼
# git  log
commit 97880695ad234a700132c2bba6d4b45c3c6ca72c
Author: Max Huang <sakana@cycu.org.tw>
Date:   Thu Sep 12 16:31:27 2013 +0800


   Fix some typo in  ri20min.rb


commit e8c460a57dc12521b92ee0f99a0fcad87215c0e6
Author: Max Huang <sakana@cycu.org.tw>
Date:   Thu Sep 12 16:29:11 2013 +0800


   Finish vi ri20min.rb origin


透過 git diff 檔案來比較差異性 (輸出內的 + 符號代表代表新的內容)
# git  diff  e8c460a57dc12521b92ee0f99a0fcad87215c0e6  97880695ad234a700132c2bba6d4b45c3c6ca72


diff --git a/ruby/ri20min.rb b/ruby/ri20min.rb
index 281b98b..a4a9101 100644
--- a/ruby/ri20min.rb
+++ b/ruby/ri20min.rb
@@ -55,7 +55,7 @@ if __FILE__ == $0
  #變更成 nil
  mg.names = nil
  mg.say_hi
-  mg.saybye
+  mg.say_bye
end


最後我們來聊一下配置設定(設定檔), 因為之前的設定方式為 --global 來設定


設定檔有優先順序,越先列出的越高
分別是
.git/config
~/.gitconfig
/etc/gitconfig
  • .git/config
    • 容器為影響範圍
    • 可以使用  git  config  --file   來設定
  • ~/.gitconfig
    • 使用者為影響範圍
    • 可以使用  git  config  --global   來設定
  • /etc/gitconfig
    • 全系統為影響範圍
    • 可以使用  git  config  --system   來設定     




Fun with Day 12 ~

沒有留言: