命令列下git diff, 有人歡喜有人厭, 本文以IDEA diff為例, 介紹如何更換Git的diff工具.
IDEA diff
IDEA作為一個圖形化工具, 其實也提供了極少一部分命令列介面, 將IDEA安裝目錄下的bin目錄新增到PATH環境變數中, 我們就可以在命令列中呼叫IDEA的命令了.
其中, IDEA的diff子命令, 需要兩個引數: left
和right
. 一般情況下, left
為舊檔案, right
為新檔案.
Git外部diff機制(Git external diff)
Git自帶了一個命令列的diff工具, 當然, 我們也可以自定義diff工具. 自定義的diff工具, 在git中叫做 Git external diff, 本文暫且稱其為 Git外部diff工具.
如果我們設定了外部diff工具的話, Git將會呼叫我們所設定的外部diff工具, 並傳遞7個引數:
path
檔案的路徑old_file
舊檔案的路徑old_hex
舊檔案的SHA1old_mode
舊檔案的mode(檔案型別+檔案許可權)new_file
新檔案的路徑new_hex
新檔案的SHA1new_mode
新檔案的mode
設定Git external diff
設定外部diff工具有兩種方式, 兩種方式都是等價的, 設定其一即可:
- 通過Git config命令設定:
git config --global diff.external xxx
- 通過環境變數
GIT_EXTERNAL_DIFF
設定:export GIT_EXTERNAL_DIFF=xxx
Git整合IDEA diff
IDEA diff只接受兩個引數, Git呼叫外部diff傳遞七個引數, 必然會導致問題, 所以我們寫個簡單的指令碼, 只把old_file
和new_file
傳遞給IDEA diff.
#!/bin/bash
path="$1"
old_file="$2"
old_hex="$3"
old_mode="$4"
new_file="$5"
new_hex="$6"
new_mode="$7"
idea diff "$old_file" "$new_file"
我們將指令碼儲存到任意位置, 指令碼命名為任意名字皆可, 例如命名為ideadiff.sh, 儲存到/home/wbourne/目錄下, 即可通過git config --global diff.external /home/wbourne/ideadiff.sh
命令將其設定為外部diff工具, 再次在命令列中使用git diff
時, 就會開啟IDEA的diff介面了.
在Windows中使用Git bash需注意碟符的問題, 可通過pwd
命令檢視對映後的路徑, 如指令碼儲存在使用者家目錄下, 則命令應為: git config --global diff.external /c/Users/wbourne/ideadiff.sh
不只是IDEA diff, 只要是提供了命令列介面的diff工具, 都可將其設定為外部diff工具.
至此, 本文就基本結束了, 受限於篇幅, 本文只介紹了最簡陋的diff指令碼, 某些情況下是報錯的, 例如: 新增檔案, 刪除檔案. 感興趣的讀者, 可繼續自行完善此指令碼!
禁用外部diff工具
最後說一下如何禁用外部diff工具, 通過--no-ext-diff
選項即可禁用外部diff工具, 即git diff --no-ext-diff
.