使用p4merge作为git的差异比较工具

15

我使用 windows 7。我想将 p4merge 用作 Git 差异/合并工具。我按照 这篇文章这篇文章 来设置和配置 p4merge

git config --global merge.tool p4merge
git config --global mergetool.p4merge.path "C:/Program Files/Perforce/p4merge.exe"
git config --global diff.tool p4merge
git config --global difftool.p4merge.path "C:/Program Files/Perforce/p4merge.exe"

这些行是来自于git config

merge.tool=p4merge
mergetool.p4merge.path=C:/Program Files/Perforce/p4merge.exe
diff.tool=p4merge
difftool.p4merge.path=C:/Program Files/Perforce/p4merge.exe
mergetool.keeptemporaries=false
mergetool.prompt=false

现在git mergetool命令正常工作。但是当我在git bash中使用git difftool命令时,我期望看到p4merge,但实际上我看到的是git bash中的内部diff实现。

我尝试了Smooth Git + P4merge,但对我不起作用。我也按照External Merge and Diff Tools中所述尝试过,但我没有理解它。

注意:

当冲突类型为removed file conflict时,git difftool命令会打开p4merge


diff.tool=p4diff 替换为 diff.tool=p4merge - topheman
@topheman,请查看我的修改。 - hasanghaforian
1
使用 / 代替 \\ 作为分隔符或许可以解决这个问题... - Philippe
@Philippe 我尝试过了,但是没有解决问题。我编辑了问题,请再看一下。 - hasanghaforian
我也使用了这些指示,并且使用git difftool --staged成功地与P4Merge一起处理了已更改的文件一段时间。但是有一件事情让我很烦恼:当添加文件时出现错误消息。p4merge需要文件进行比较。有没有办法省略添加的文件?你是如何解决这个问题的? - Michael S.
大家好!你们找到解决问题的正确方法了吗?我也遇到了类似的情况 :/ - Toma Tomov
4个回答

18

不确定是否有帮助,但是Git的最新版本支持P4Merge(我在Windows通过MSYS2使用git version 2.17.0.)。

您可以通过运行git difftool --tool-help来查看是否是这种情况。它会列出Git可以使用的可用工具(因为它们已在您的%PATH%中找到),以及它可能使用的工具(如果已安装则如此)。

如果p4merge出现在此列表中,则只需将p4merge.exe所在的路径添加到您的%PATH%中即可(在Windows上,我建议使用Rapid Environment Editor)。完成后,您只需要将以下配置添加到您的.gitconfig中:

[diff]
    tool = p4merge
[merge]
    tool = p4merge

仅保留 difftool.path 等其他内容。

然后尽情使用 git difftoolgit mergetool

注意:我有一个存储库,即使我发出git difftoolgit mergetool命令,P4Merge也不会启动。我不确定那个存储库的问题在哪里。然而,我尝试在我的驱动器上的某个地方创建一个空仓库,使用 git init 添加文件,提交它,然后修改它,然后我尝试了difftool,它起作用了。因此,如果上述描述对您无效,可能问题出在其他地方。希望这能帮到您。


2

如果您使用的是Mac,请不要忘记在Applications之前添加/,例如:

[mergetool "p4merge"]
    path = /Applications/p4merge.app/Contents/MacOS/p4merge

这就是为什么当我运行以下命令时,P4Merge 无法打开的原因:
git mergetool

2

迟到总比不到好 :)

mergetool.p4merge.path 应该改为 mergetool.p4merge.cmd。

将 mergetool 和 difftool 两行的路径改为 cmd。


1
你可以使用选项 mergetool.p4merge.path,标签的顺序将是标准的:REMOTE、BASE、LOCAL。 - Alex78191

0

DeviantDev对此有一个非常好的答案。

将这个添加到我的.gitconfig文件中对我起了作用...

[diff]
    tool = p4merge
[difftool]
    prompt = false
[difftool "p4merge"]
    path = C:\\Program Files\\Perforce\\p4merge.exe
[merge]
    tool = p4merge
[mergetool "p4merge"]
    path = C:\\Program Files\\Perforce\\p4merge.exe
[mergetool]
    keepBackup = false

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接