Git使用p4merge作为diff和merge工具
12/03
本文最后更新于
2024年12月03日,已超过
88天没有更新。如果文章内容或图片资源失效,请留言反馈,我会及时处理,谢谢!
我们团队之前使用Perforce作为版本管理软件,其提供的图形界面的diff/merge工具非常好用。因此在切换到Git版本管理后,希望Git合并版本时能够继续使用这些工具。
下面是配置p4merge作为Git的diff/merge工具方法。
安装
- 从Perforce网站下载免费的二进制包。
通过浏览器下载,安装包网址:https://www.perforce.com/downloads/visual-merge-tool
这里我们选择和操作系统匹配的2019版本(Centos 8.4)。
或者直接使用wget下载。
$ wget https://cdist2.perforce.com/perforce/r19.1/bin.linux26x86_64/p4v.tgz
如果下载最新版本,会因为缺少依赖动态库报错。
p4merge.bin: error while loading shared libraries: libOpenGL.so.0: cannot open shared object file: No such file or directory
- 解压缩安装包并配置PATH变量
$ mkdir /path/to/p4merge
$ tar xzvf p4v.tgz -C /path/to/p4merge --strip-components=1
$ vi ~/.bashrc
export PATH=/path/to/p4merge/bin:$PATH
$ source ~/.bashrc
- 测试p4merge命令
$ p4merge
Git配置
在个人git配置文件~/.gitconfig
中添加以下内容:
[diff]
tool = p4merge
[difftool]
prompt = false
[difftool "p4merge"]
cmd = p4merge "$LOCAL" "$REMOTE"
keepTemporaries = false
trustExitCode = false
keepBackup = false
[merge]
keepBackup = false
tool = p4merge
[mergetool]
prompt = false
keepBackup = false
[mergetool "p4merge"]
cmd = p4merge "$BASE" "$LOCAL" "$REMOTE" "$MERGED"
keepTemporaries = false
trustExitCode = false
keepBackup = false
测试
首先制造一个合并冲突场景,远程仓库和本地仓库同时修改同一个文件同一处内容,然后本地仓库拉取远程仓库并合并。
$ git pull
Auto-merging README.md
CONFLICT (content): Merge conflict in README.md
Automatic merge failed; fix conflicts and then commit the result.
此时pull命令由于冲突原因无法完成合并操作,需要手动解决冲突。
$ git mergetool
通过鼠标点击合并区域右侧的按钮选择想要的集成内容,合并完成后点击保存修改。
然后Git提交修改文件进入版本库。
$ git add README.md
$ git commit -m "Merge from Zhang"
也可以尝试diff唤起p4merge工具:
$ git difftool HEAD README.md
参考资料
https://gist.github.com/IvanCl4udio/b606735bedcdcdea7cb7a9790d96ca74

