Git差異並列顯示

默認的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是一個在命令下可以實現文件左右並列對比的工具,需要獨立安裝,詳見://github.com/jeffkaufman/icdiff

安裝icdiff:

pip install //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是通過打開一個瀏覽器頁面來展示文件差異的,也是一種圖形化的展示方式,詳見://github.com/danvk/webdiff
另外,webdiff會把當前所有改動的文件列表展示出來,只要單擊選擇指定文件就可以通過左右並列的方式查看該文件的差異對比了,這一點比通過DiffMerge對比更加友好。

安裝webdiff:

pip install webdiff

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

SmartGit

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

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