[Git] 設定 git diff 使用外部檔案比較工具

[Git] 設定 git diff 使用外部檔案比較工具

最近剛開始在 Mac 上學習使用 Git,想看一些 change list 的話,

得用 git diff 看看修改了什麼東西,但是是用文字 diff 的方式呈現…

雖然說也沒什麼不好,不過跟平常 GUI 版本的 diff 工具比起來,

還是 GUI 工具可以直接看到左右兩邊檔案的差異比較方便~

幸好 Git 也提供了跟外部檔案比較工具連結的功能,來試試看吧~

 

1. 寫一個 wrapper shell script

Git 會以下面的格式來呼叫 diff 工具:

path old-file old-hex old-mode new-file new-hex new-mode

 

但一般的 diff 工具 (像我愛用的 Beyond Compare) 只需要輸入 old-file 和 new-file 兩個參數,

因此會需要一個 wrapper shell script,幫忙把必要的參數帶給 diff 工具~

像我寫了一個 git_diff_wrapper.sh 內容如下:

#!/bin/sh
# diff is called by git with 7 parameters:
# path old-file old-hex old-mode new-file new-hex new-mode
/usr/local/bin/bcomp "$2" "$5"

 

這邊的 /usr/local/bin/bcomp 是由 command line 呼叫 Beyond Compare 的方式,

Beyond Compare 還提供了另一個 /usr/local/bin/bcompare,

但這個 bcompare 的版本是會執行 Beyond Compare 程式後,

自己就結束掉,這可能會導致 git 把正要比較的檔案給刪除掉…

使用 bcomp 版本的話,它會等到 Beyond Compare 程式結束後,

自己才結束,就不會遇到刪除的問題~

 

寫好之後,記得把這個 shell script 設定成可執行:

chmod a+x git_diff_wrapper.sh

 

2. 設定 Git 使用外部 diff 工具

執行 git config 來將 diff.external 這個值設定到我們的 wrapper shell script:

git config --global diff.external ~/git_diff_wrapper.sh

 

3. 執行 git diff

這時執行 git diff 指令的話,就會自動使用設定好的檔案比較工具來做比較了,

像是我執行下面的指令:

git diff 6124a1ffa1adbea2cb8ce15949421b6e5ab94355 round1.py

 

就會開啟 Beyond Compare 來比較檔案的修改內容:

Screen Shot 2016-04-12 at 12.45.48 AM   

 

參考資料:

stackoverflow: How do I view ‘git diff’ output with a visual diff program?

 

(本頁面已被瀏覽過 1,715 次)

發佈留言

發佈留言必須填寫的電子郵件地址不會公開。 必填欄位標示為 *

這個網站採用 Akismet 服務減少垃圾留言。進一步了解 Akismet 如何處理網站訪客的留言資料