Git差異並列顯示

nuccch發表於2021-12-22

預設的git diff命令只會將檔案的修改差異使用“+”,“-”符號標註出來,並不直觀。
最理想的方式應該是使用諸如“DiffMerge”這樣的對比工具將原始檔案和修改後的檔案左右並列顯示,這樣就能從全域性上非常明顯地看出哪裡是修改的,哪裡是刪除的。
遺憾的是Git本身並沒有自帶這樣的對比工具,但是它支援使用外部對比工具來達到這個目的,參考:How do I view 'git diff' output with my preferred diff tool/ viewer?
另外,還有一些第三方工具也支援並列對比顯示。

DiffMerge

配置Git使用DiffMerge作為Diff工具。

在.gitconfig檔案中新增如下配置:

[diff]
    tool = diffmerge

[difftool "diffmerge"]
    cmd = 'C:/Program Files/SourceGear/Common/DiffMerge/sgdm.exe' \"$LOCAL\" \"$REMOTE\"	

[difftool]
	prompt = false

儲存檔案,執行git config --global --list檢視具體配置資訊:

diff.tool=diffmerge
difftool.diffmerge.cmd='C:/Program Files/SourceGear/Common/DiffMerge/sgdm.exe' "$LOCAL" "$REMOTE"
difftool.prompt=false

到Git倉庫目錄下執行git difftool命令即可開啟DiffMerge介面,檢視當前修改過的檔案差異對比。
不完美的是,每次只能檢視一個檔案的差異對比。如果同時有多個檔案存在改動,會針對每一個檔案依次開啟一次DiffMerge視窗(關閉當前DiffMerge視窗之後會立即開啟一個新的DiffMerge視窗)。

使用這種方式還可以配置其他外部Diff工具進行檔案差異對比,如:Meld,Beyond Compare等等。

Icdiff

icdiff是一個在命令下可以實現檔案左右並列對比的工具,需要獨立安裝,詳見:https://github.com/jeffkaufman/icdiff

安裝icdiff:

pip install https://github.com/jeffkaufman/icdiff.git

如果無法直接通過pip安裝,可以下載icdiff原始碼進行安裝。

tar xvf icdiff-release-2.0.4.tar.gz
cd icdiff-release-2.0.4
python setup.py build
python setup.py install

在.gitconfig檔案中新增如下配置:

[icdiff]
	options = --highlight --line-numbers

儲存檔案,執行git config --global --list檢視具體配置資訊:

icdiff.options=--highlight --line-numbers

到Git倉庫目錄下執行git icdiff命令即可展示左右並列的檔案差異對比,從上到下依次展示每一個有改動的檔案對比資訊。
值得注意的是:icdiff並不會展示檔案的全部資訊,只會展示有差異的一段資料,但是這樣也比原生的git diff命令直觀了許多。
可以說,icdiff是命令列下使用Git diff的不二選擇!

webdiff

webdiff也是一個獨立的差異對比的工具,與Icdiff不同的是,webdiff是通過開啟一個瀏覽器頁面來展示檔案差異的,也是一種圖形化的展示方式,詳見:https://github.com/danvk/webdiff
另外,webdiff會把當前所有改動的檔案列表展示出來,只要單擊選擇指定檔案就可以通過左右並列的方式檢視該檔案的差異對比了,這一點比通過DiffMerge對比更加友好。

安裝webdiff:

pip install webdiff

安裝好webdiff之後無需做任何配置,直接到Git倉庫目錄下執行git webdiff命令即可開啟一個瀏覽器頁面,在該頁面中會列出當前有改動的檔案列表。
遺憾的是,我在Windows 10環境使用webdiff時總是提示“read-error”錯誤(無法讀取需要對比的檔案),暫時還不知道具體原因。

SmartGit

SmartGit是一個非常高階的工具,它已經整合了Git,檔案diff只是其中的一部分很小的功能,詳見:https://www.syntevo.com/smartgit/
SmartGit的diff功能非常直觀,會列出當前所有改動的檔案列表,只需要點選某一個檔案就能以左右並列的方式檢視該檔案的修改差異,而且展示的是檔案的全部資訊,能從全域性上知道檔案的改動位置。
SmartGit是商業軟體,但是易用性真的非常誘人!

【參考】
https://blog.csdn.net/azhong148/article/details/87736788 git diff 比較檔案的工具 DiffMerge 安裝配置使用
https://www.jianshu.com/p/ec0da9b08b52 設定git diff用beyond compare工具比較

相關文章