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工具比较

posted @ 2021-12-22 17:49  nuccch  阅读(2234)  评论(0编辑  收藏  举报