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是一個在命令下可以實現文件左右並列對比的工具,需要獨立安裝,詳見: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是商業軟件,但是易用性真的非常誘人!

Git Extensions

Git Extensions也是一個值得嘗試的工具,它雖然沒有並排顯示差異的功能,但是會列出修改過的文件列表,選擇指定文件就能查看該文件的改動。
另外,在查看指定文件差異時,可以選擇“顯示整個文件”,這樣也能非常直觀地知道文件改動的具體位置。
Git Extensions
下載地址:https://github.com/gitextensions/gitextensions

diff2html

diff2html是一個可以實現Git修改並列顯示的開源工具,基於MIT開源協議。
diff2html是一個nodejs模塊,在安裝diff2html之前必須先安裝並配置好Node.js,參考:Node.js學習入門
安裝並配置好Node.js環境之后就可以安裝diff2html了:

npm install -g diff2html-cli

安裝完畢后,直接進入到Git項目中執行命令:diff2html,此時將會在操作系統默認瀏覽器中打開一個Web頁面,在頁面中展示文件修改狀態。
但是diff2html命令默認不以並列方式展示,需要使用-s side選項,即:diff2html -s side,diff2html命令的具體使用方法詳見:diff2html-cli
一個常用的diff2html命令參數組合如下:

diff2html -s side --su open --lm words

上述命令及參數不方便操作,故可以將其以命令別名的方式設置:

$ vim .bashrc
alias gf='diff2html -s side --su open --lm words'

如此,每次只需要在Git項目根路徑下執行gf命令即可(Windows環境需要安裝Cygwin,然后在文件$CGWIN_HOME\home\用戶名\.bashrc中編輯,參考:讓cygwin啟動時加載.bashrc)。
值得注意的是:
diff2html不能查看commit歷史的差異對比,只能對比當前發生的修改與最近一個commit的差異。換言之,如果Git項目中沒有發生任何修改或者修改的內容已經commit過,在執行diff2html命令后是不會打開對比Web頁面的。

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


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM