默认的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也是一个值得尝试的工具,它虽然没有并排显示差异的功能,但是会列出修改过的文件列表,选择指定文件就能查看该文件的改动。
另外,在查看指定文件差异时,可以选择“显示整个文件”,这样也能非常直观地知道文件改动的具体位置。
下载地址:https://github.com/gitextensions/gitextensions
【参考】
https://blog.csdn.net/azhong148/article/details/87736788 git diff 比较文件的工具 DiffMerge 安装配置使用
https://www.jianshu.com/p/ec0da9b08b52 设置git diff用beyond compare工具比较