[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 來比較檔案的修改內容:
參考資料:
stackoverflow: How do I view ‘git diff’ output with a visual diff program?