命令列下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.
參考
- Git Documentation
- Git diff Documentation
轉載請註明出處,本文鏈接:https://www.uj5u.com/gongcheng/434452.html
標籤:其他
