如何配置我的mergetool不显示冲突标记?

时间:2014-01-20 05:34:47

标签: git smartgit mergetool p4merge

我将git配置为使用 SmartSynchronize 作为合并工具,但是当我运行git mergetool时,我仍然会看到冲突标记,如下所示:

enter image description here (bigger version)

我正在使用 P4Merge 并看到它处理这些冲突标记,但我真的很喜欢在屏幕中间查看合并文件,如 SmartSynchronize ;所以我做错了什么,或者这个工具是否无法处理冲突标记?

我的.gitconfig

[mergetool "smartsynchronize"]
cmd = '/C/Program Files (x86)/SmartSynchronize 3.3/bin/smartsynchronize.exe' "$LOCAL" "$REMOTE" "$MERGED"   

(另外,如果你知道一种方法让 P4Merge 在中间显示合并文件,我很想知道)

3 个答案:

答案 0 :(得分:1)

目前的答案似乎是不可能的。我调查了为什么我的meld工具没有发生这种情况,事实上,它曾经用过。我的git版本(OS X上的1.8.5.3)带有一个自定义脚本来启动meld,第四个参数--output允许git设置目标文件。如果在没有第四个参数的情况下调用meld,它也会在输出中显示冲突标记。

p4merge还支持3路合并的4个参数。

我相信SmartSynchronize的制造商必须改变它以支持$ BASE参数,用于解决冲突,以及$ MERGED参数输出。

答案 1 :(得分:1)

git-mergetool调用三向合并工具 - 即从两个分支和共同祖先生成合并结果的工具。总共有四个文件 - 三个输入文件和一个输出文件。

但是,您只使用三个输入调用mergetool:两个分支和合并结果。因此,它使用合并结果作为共同祖先 - git-merge已写入合并文件的文件(带有冲突标记)。相反,您需要使用双方($LOCAL$REMOTE)和共同祖先$BASE调用合并工具,告诉它将合并结果放入$MERGED

您的3向合并工具应该能够实际区分共同的祖先和输出文件。您应该与您工具的作者交谈,以确定这是否属实,并告诉他们如果他们不能,他们的工具是不足的。

但是,如果您真的喜欢有缺陷的合并工具,则可以创建一个脚本:

  • $BASE复制到临时文件
  • 使用$LOCAL$REMOTE和临时文件
  • 调用三向合并工具
  • 检查退出代码是否成功以及成功合并后,将临时文件复制到$MERGED
  • 从合并工具
  • 返回退出代码

答案 2 :(得分:-2)

如果在调用visual merge时看到冲突标记,则只表示一个:

您尚未配置mergetools,内部合并以静默方式使用

在Git中使用SmartSynchronize作为mergetool的正确方法是~/.gitconfig.git/config中的这种(类型)代码段(根据post in Syntevo blog

[merge]
        tool = smartsynchronize
[mergetool "smartsynchronize"]
        cmd = '/C/PATH TO/smartsynchronize.exe' "$LOCAL" "$REMOTE" "$MERGED"
        trustExitCode = false