p4merge 错误 [GIT]

发布于 2024-07-19 05:16:58 字数 266 浏览 9 评论 0原文

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

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

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

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

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

I am trying to use p4merge with git but I am getting:

Error starting p4merge: "path/myFile" is (or points to) an invalid file (this lists the BASE, LOCAL, REMOTE, and standard version of the file).

Git tells me about the conflict then it asks if I wanna start the mergetool configured (p4merge) and then I get the error above.

Additional note: it happens with any file!

Any clue about what this is and how to fix it?

如果你对这篇内容有疑问,欢迎到本站社区发帖提问 参与讨论,获取更多帮助,或者扫码二维码加入 Web 技术交流群。

扫码二维码加入Web技术交流群

发布评论

需要 登录 才能够评论, 你可以免费 注册 一个本站的账号。

评论(2

月下凄凉 2024-07-26 05:16:58

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

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

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

This worked for me using msysGit on windows 7:

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

Not sure why but the quoting screwed things up for me.

北方。的韩爷 2024-07-26 05:16:58

您将看到这里 我的 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 使用
  • “< code>merge" 作为 merge.tool 名称的名称(因为实际工具是在 merge.sh 脚本中调用的,您可以在其中切换任意数量的合并工具)
  • 在脚本中使用双引号将 $base$alocal$remote$result
  • 起来基于“基本”文件的存在来调用该工具的路径。
  • 需要始终有 3 个文件作为参数合并(即使“base”不存在...)

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

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


msysgit 1.7.x

更新评论中提到的

Benjol

msysgit 现在原生支持 p4merge

这意味着你可以这样做:

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

You will see here my config for DiffMerge or KDiff3.

Based on that, I would recommend for p4merge:

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

and merge.sh being a wrapper (copied in a directory referenced by your PATH environment variable), able to take into account the case where no BASE exists.
(when a file is created in two different branches being then merged, there would be no common ancestor for that file)

#!/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

You may note:

  • the use of PWD in the config of the merge
  • the use of "merge" as name of the merge.tool name (since the actual tool is called in the merge.sh script, where you can switch between any number of merge tool you want)
  • the use of double quotes around $base, $alocal, $remote, $result within the script
  • the conditional path for calling the tool, based on the existence of a "base" file.
  • the need to always have 3 files to merge as parameters (even when 'base' does not exist...)

Just tested it (it turns out, you can download and install only p4merge -- section Client/Visual Merge Tool --, even if you do not have any other P4 product installed).

With the settings describe above, MSysGit1.6.3, DOS session or Git bash session:
It just worksTM.


Update msysgit 1.7.x

Benjol mentions in the comments:

p4merge is now supported natively by msysgit.

This means you can just do:

git config --global merge.tool p4merge
# and I recommend 
git config --global mergetool.keepBackup false
~没有更多了~
我们使用 Cookies 和其他技术来定制您的体验包括您的登录状态等。通过阅读我们的 隐私政策 了解更多相关信息。 单击 接受 或继续使用网站,即表示您同意使用 Cookies 和您的相关数据。
原文