git可视化diff与merge工具
git支持很多种diff和merge工具,可以使用下面的命令查看。
git difftool --tool-help
# or
git mergetool --tool-help
命令输出如下:
'git difftool --tool=<tool>' may be set to one of the following:
araxis
vimdiff
vimdiff2
vimdiff3
The following tools are valid, but not currently available:
bc3
codecompare
deltawalker
diffmerge
diffuse
ecmerge
emerge
gvimdiff
gvimdiff2
gvimdiff3
kdiff3
kompare
meld
opendiff
p4merge
tkdiff
xxdiff
Some of the tools listed above only work in a windowed
environment. If run in a terminal-only session, they will fail.
该输出结果表明,在我们的系统中已成功配置了araxis、vimdiff、vimdiff2和vimdiff3几个功能模块。
其他列出的如git的功能虽然理论上可实现支持作用但目前尚未完成系统的安装配置。
那么多工具中哪一个最实用呢?从个人使用体验来看,p4merge 是一款非常实用的选择。此外,请注意不要被其名称误导:误以为其仅适用于merging操作时,请明确它还可以执行diff操作。
p4merge
p4merge 是 \texttt{Perforce} 这家公司的产品系列中的一款叫 Perforce 的软件的一个非开源但免费使用的产品。
值得特别指出的是,在商业版本控制系统的领域中,Perforce 无可争辩地占据了无可争议的第一位地位。
安装与配置
为了方便后续操作,在使用perforce工具时需要从perforce官方渠道获取p4merge程序包(该程序包已进行了编译处理)。随后将下载得到的压缩文件解压至当前工作目录中指定位置,在我的设备上完成解压操作后将文件存放于本地路径...其中p4merge程序的具体运行位置位于...
想要让git识别p4merge需要进行如下配置:
git config --global merge.tool p4merge
git config --global mergetool.p4merge.path "/usr/local/p4v/bin/p4merge"
有些人可能会好奇为何未看到与diff相关的配置。因为git的merge配置默认应用于diff, 所以只需配置merge即可。
两个场景
使用视觉化比较工具进行差分分析以及用于解决merges冲突时的差异对比是两种典型应用场景。
diff
请依次执行以下操作:首先运行该命令以查看master分支上的最新提交和上一轮提交的diff。
git difftool master^ master
GUI截屏如下:

从图上可以很直观的看到文件在不同版本的diff。
merge
当运行 git merge <branch> 导致冲突时,请运行以下命令以观察冲突后的结果。
git mergetool
GUI截屏如下:

了解这个图表。上半部分分为三块区域:中间区域展示了本次合并的核心代码库(即两个分支的共同祖先 commit 的信息)。左边区域列出了要合并分支的所有代码细节(
几个选项
当执行 git difftool <ref-a> <ref-b> 时git会提示:
Viewing (1/1): 'Documentation/RelNotes/2.5.1.txt'
Launch 'p4merge' [Y/n]:
如果希望不要每次都出现这个提示信息,请使用 -y | -Y | --no-prompt 这些命令来告诉git不显示提示。
这个选项同样也适用于执行 git mergetool 时遇到的提示情况。
当执行 git mergetool 然后从p4merge里退出来以后,git会询问:
Was the merge successful? [y/n]
因为git无法得知参与者是否已经解决了合并冲突, 所以它会向用户提供询问. 用户可以选择使用 --trust-exit-code 选项让git查看合并结果以判断任务是否完成.
在运行命令 git mergetool 并退出p4merge之后,在冲突目录中的README文件会在其自身目录中生成一个备份副本 README.orig 。默认情况下,冲突文件会保持原有的内容;如果希望不要保存这个备份副本,则可以适当配置以避免其生成。
git config --global mergetool.keepBackup false
这样git就不会再自动产生 .orig 文件了。
官方文档
有关 p4merge 更多的内容请执行 /path/to/p4merge -h 了解。
关于详细信息,请访问git官方文档-git-difftool查看。
深入探讨 git mergetool 的更多信息,请访问 git官方文档 - git-mergetool以获取详细信息。
