关于perforce:p4merge错误[GIT]

p4merge error [GIT]

我正在尝试使用p4merge和git,但我得到:

启动p4merge时出错:"path/myfile"是(或指向)无效文件(列出了文件的基本版本、本地版本、远程版本和标准版本)。

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

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

关于这是什么以及如何修复它有什么线索吗?


在Windows7上使用msysgit对我很有用:

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

不知道为什么,但引用的话把我搞砸了。


您将在这里看到我的diffmerge或kdiff3配置。

基于此,我建议使用p4merge:

1
2
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的情况。(当在合并的两个不同分支中创建文件时,该文件将没有共同的祖先)

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
#!/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"不存在…)

刚刚测试过(事实证明,即使没有安装任何其他P4产品,您也只能下载和安装P4Merge——部分客户机/可视合并工具)。

使用上述设置,msysgit1.6.3、dos会话或git bash会话:它只起作用。

更新msysgit 1.7.x

Benjol在评论中提到:

p4merge is now supported natively by msysgit.

This means you can just do:

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