我想在git中使用p4merge,但是遇到了以下错误:
p4merge启动错误: "path/myFile" 是一个无效的文件(或指向一个无效的文件)(列出了该文件的BASE、LOCAL、REMOTE和标准版本)。
Git告诉我存在冲突,然后询问是否启动合并工具(p4merge),然后就会出现上述错误。
另外需要注意的是,这种情况适用于任何文件!
有什么线索可以解决这个问题吗?
我想在git中使用p4merge,但是遇到了以下错误:
p4merge启动错误: "path/myFile" 是一个无效的文件(或指向一个无效的文件)(列出了该文件的BASE、LOCAL、REMOTE和标准版本)。
Git告诉我存在冲突,然后询问是否启动合并工具(p4merge),然后就会出现上述错误。
另外需要注意的是,这种情况适用于任何文件!
有什么线索可以解决这个问题吗?
在Windows 7上使用msysGit,以下方法适用:
git config --global merge.tool p4merge
git config --global mergetool.p4merge.cmd 'p4merge $BASE $LOCAL $REMOTE $MERGED'
我不确定为什么,但引号使事情变得混乱了。
git config --global mergetool.p4merge.cmd '"C:\Install Dir Has Spaces\p4merge.exe" $BASE $LOCAL $REMOTE $MERGED'
。 - Michael您可以在这里查看我针对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
使用双引号我刚测试过了(结果是,您可以下载并安装仅 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
$PWD
和 $LOCAL
变量会在配置文件中扩展。我不得不手动编辑 %USERPROFILE$\.gitconfig
文件。也许是我的错误,但以防万一其他人遇到同样的问题。 - BenjolkeepBackup = false
(.orig 文件让我发疯了)。 - Benjolgit config --global merge.tool p4merge
(我建议执行git config --global mergetool.keepBackup false
)。 - Benjol