git - 使用 p4merge 作为 git diff 工具

标签 git bash version-control windows-7 p4merge

我使用 windows 7 .我想用 p4merge作为 Git 差异/merge 工具。我关注this articlethis one设置和配置 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 difftool命令 git bash , 我期待 p4merge但我在 git bash 中看到 diff 的内部实现.

我试过了 Smooth Git + P4merge但它对我不起作用,我也尝试按照 External Merge and Diff Tools 中的描述进行操作但我不明白。

注意:

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

最佳答案

不确定是否有帮助,但最新版本的 Git 支持 P4Merge(我通过 MSYS2 在 Windows 上使用 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 也不会启动。我不确定那个 repo 协议(protocol)中的问题是什么。但是我尝试使用 git init 在我的驱动器上的某个地方创建一个空的 repo,添加一个文件,提交它,然后修改它,然后我尝试了 difftool 它奏效了。因此,如果上述描述对您不起作用,则问题可能出在其他地方。希望这会有所帮助。

关于git - 使用 p4merge 作为 git diff 工具,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/32152446/

相关文章:

git - 你如何将 git add patch -p mode 与 diff 的 ignore-all-space 结合起来

python - 推送到远程仓库

git - `git` 和 `less` 集成在 OS X 终端 : prevent writing output of `less` to tty

bash - "sh runMyCode.sh"不以 "for n in {10..99}"格式循环

linux - 在脚本中使用 $USER

visual-studio - 为什么版本控制系统缺乏 Visual Source Safe 的共享功能,您使用什么源代码控制并认为值得尝试?

当文件不存在时,git cherry-pick 不显示冲突?

git - 如何只列出两个分支之间新添加的文件

Bash:读取文件时丢失特殊字符

version-control - Nuget - 在源代码管理中存储包,还是不?