p4merge 错误 [GIT]

Posted

技术标签:

【中文标题】p4merge 错误 [GIT]【英文标题】:p4merge error [GIT] 【发布时间】:2010-10-26 08:39:04 【问题描述】:

我正在尝试将 p4merge 与 git 一起使用,但我得到了:

启动 p4merge 时出错:“path/myFile”是(或指向)无效文件(这列出了文件的 BASE、LOCAL、REMOTE 和标准版本)。

Git 告诉我冲突,然后它询问我是否要启动配置的合并工具 (p4merge),然后我得到上面的错误。

附加说明:任何文件都会发生这种情况!

关于这是什么以及如何解决它的任何线索?

【问题讨论】:

也许在 .gitconfig 中包含您配置合并工具和完整错误消息的部分?文件名中有空格吗? nope 文件名中没有空格 - 我使用这个问题配置了 git:***.com/questions/426026/… git diff tmp file invalid on windows when using external program on Windows 7的可能重复 【参考方案1】:

这对我在 Windows 7 上使用 msysGit 有用:

git config --global merge.tool p4merge
git config --global mergetool.p4merge.cmd 'p4merge $BASE $LOCAL $REMOTE $MERGED'

不知道为什么,但引用让我搞砸了。

【讨论】:

从一台 Win 8 机器切换到另一台,都使用 git bash 并且也必须这样做,谢谢! 我应该提到我使用 Powershell,所以我不确定 cmd.exe。 我用过git config --global mergetool.p4merge.cmd '"C:\Install Dir Has Spaces\p4merge.exe" $BASE $LOCAL $REMOTE $MERGED' 在 windows 命令提示符下,第二个命令失败,说明使用错误。所以我在 git bash 上执行了它并且它起作用了。 我在 Mac 终端中执行此操作,现在我收到此错误:'p4merge: command not found'。有什么建议吗?【参考方案2】:

您将 see here 我的 DiffMerge 或 KDiff3 配置。

基于此,我会推荐 p4merge:

git config --global merge.tool merge
git config --global mergetool.merge.cmd "merge.sh \"$PWD/$LOCAL\" \"$PWD/$BASE\" \"$PWD/$REMOTE\" \"$PWD/$MERGED\""

并且merge.sh 是一个包装器(复制到您的PATH 环境变量引用的目录中),能够考虑不存在BASE 的情况。 (当一个文件在两个不同的分支中创建然后合并时,该文件将没有共同的祖先)

#!/bin/sh

# Passing the following parameters to mergetool:
#  local base remote merge_result

alocal=$1
base=$2
remote=$3
result=$4

if [ -f $base ]
then
    p4merge.exe -dl "$base" "$alocal" "$remote" "$result" 
else
    p4merge.exe -dl "$result" "$alocal" "$remote" "$result" 
fi

你可能会注意到:

在合并的配置中使用PWD 使用“merge”作为 merge.tool 名称的名称(因为实际工具是在 merge.sh 脚本中调用的,您可以在其中切换任意数量的合并工具) 在脚本中在$base$alocal$remote$result 周围使用双引号 调用工具的条件路径,基于“基础”文件的存在。 需要始终将 3 个文件合并为参数(即使 'base' 不存在...)

刚刚测试过(事实证明,您可以download and install only p4merge -- 部分客户端/可视合并工具 --,即使您没有安装任何其他 P4 产品)。

使用上述设置,MSysGit1.6.3,DOS 会话或 Git bash 会话: 它只是工作TM


更新 msysgit 1.7.x

Benjol 在 cmets 中提及:

msysgit 现在原生支持 p4merge

这意味着你可以这样做:

git config --global merge.tool p4merge
# and I recommend 
git config --global mergetool.keepBackup false

【讨论】:

您在第一个代码块的第二行中有两次“merge.sh”,但纠正后,一切正常。谢谢! 我刚刚在新机器上又试了一次。在我看来,如果您从 bash 设置配置,$PWD$LOCAL 变量会在配置文件中展开。我不得不手动编辑%USERPROFILE$\.gitconfig 文件。也许是我的错误,但以防其他人有同样的问题。 @Benjol:很有趣,我也会再次测试它。您的新机器与您的第一次尝试不同吗? (较新的操作系统?) @VonC,Vista,是的。另一个值得一提的调整是keepBackup = false(.orig 文件让我发疯) 注意:根据第三条评论here,msysgit 现在原生支持 p4merge。我不确定从哪个版本开始。这意味着你可以只做git config --global merge.tool p4merge(我推荐git config --global mergetool.keepBackup false

以上是关于p4merge 错误 [GIT]的主要内容,如果未能解决你的问题,请参考以下文章

text 在Mac OS X上使用p4merge作为Git mergetool。

ini Git for Windows:将Helix Visual Merge Tool(P4Merge)设置为默认的mergetool

P4Merge 和 DiffMerge 之间的主要区别

text P4merge在MACOS中

sh 在Linux上安装p4merge的脚本

git rebase,跟踪“本地”和“远程”