p4merge错误[GIT]

28

我想在git中使用p4merge,但是遇到了以下错误:

p4merge启动错误: "path/myFile" 是一个无效的文件(或指向一个无效的文件)(列出了该文件的BASE、LOCAL、REMOTE和标准版本)。

Git告诉我存在冲突,然后询问是否启动合并工具(p4merge),然后就会出现上述错误。

另外需要注意的是,这种情况适用于任何文件!

有什么线索可以解决这个问题吗?


也许在.gitconfig中包含您配置合并工具和完整错误消息的部分?您的文件名中是否有空格或其他字符? - araqnid
没有空格的文件名 - 我使用这个问题配置了Git:https://dev59.com/questions/U3RC5IYBdhLWcg3wD8tV - JohnIdol
2个回答

40

在Windows 7上使用msysGit,以下方法适用:

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

我不确定为什么,但引号使事情变得混乱了。


从一个Win 8机器切换到另一个,两者都使用git bash,我也不得不这样做,谢谢! - Sami Rajala
我应该提到我使用的是PowerShell,所以我不确定cmd.exe。 - Mike Glenn
3
我使用了 git config --global mergetool.p4merge.cmd '"C:\Install Dir Has Spaces\p4merge.exe" $BASE $LOCAL $REMOTE $MERGED' - Michael
@Engin请确保p4merge在您的路径中可用。 - Mike Glenn
@MikeGlenn,感谢您!您是第一个为我在Windows 7上的MINGW64安装共享有效配置的人。过去30分钟一直让我抓狂。 - Shadoninja
显示剩余3条评论

9

您可以在这里查看我针对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.sh脚本,您可以在其中切换任意数量的合并工具)
  • 脚本中对$base$alocal$remote$result使用双引号
  • 基于“base”文件的存在性来调用工具的条件路径。
  • 始终需要3个要合并的文件参数(即使没有“base”文件...)

我刚测试过了(结果是,您可以下载并安装仅 p4merge——部分客户端/可视化合并工具——即使您没有安装其他 P4 产品)。

使用上述设置,在 MSysGit1.6.3、DOS 会话或 Git bash 会话中:
它只是可以正常工作TM


更新 msysgit 1.7.x

Benjol 在评论中提到:

p4merge 现在已经被 msysgit 原生支持

这意味着您只需执行以下操作:

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

你在第一个代码块的第二行把 "merge.sh" 写了两次,但是纠正过之后一切都正常了。谢谢! - Benjol
我最近在新机器上尝试了一次。我觉得,如果你从 bash 中设置配置文件,$PWD$LOCAL 变量会在配置文件中扩展。我不得不手动编辑 %USERPROFILE$\.gitconfig 文件。也许是我的错误,但以防万一其他人遇到同样的问题。 - Benjol
@Benjol:有趣,我也会再次测试。你的新机器和之前尝试的不同吗?(操作系统更新了吗?) - VonC
@VonC,Vista,是的。另一个值得一提的调整是 keepBackup = false(.orig 文件让我发疯了)。 - Benjol
2
注意:根据这里的第三条评论,p4merge现在已经被msysgit原生支持。我不确定是从哪个版本开始的。这意味着你只需要执行git config --global merge.tool p4merge(我建议执行git config --global mergetool.keepBackup false)。 - Benjol
@Benjol:谢谢您提供的信息,我已将其包含在答案中。 - VonC

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