1

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

在此处输入图像描述 (大版本)

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

我的.gitconfig

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

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

4

3 回答 3

1

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

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

我相信 SmartSynchronize 的制造商将不得不对其进行更改以支持 $BASE 参数(用于解决冲突)和 $MERGED 参数以用于输出。

于 2014-02-11T22:47:01.000 回答
1

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

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

您的 3 路合并工具应该能够真正区分共同祖先和输出文件。您应该与工具的作者交谈以确定这是否属实,如果他们不能,则向他们建议他们的工具有缺陷。

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

  • 复制$BASE到临时文件
  • $LOCAL使用,$REMOTE和临时文件调用三向合并工具
  • 检查退出代码是否成功,并在成功合并时将临时文件复制到$MERGED
  • 从合并工具返回退出代码
于 2014-02-12T02:55:40.367 回答
-2

如果您在调用视觉合并时看到冲突标记,则表示只有一个:

您还没有配置合并工具,内部合并被静默使用

在 Git 中使用 SmartSynchronize 作为合并工具的正确方法是在 ~/.gitconfig.git/config(根据Syntevo 博客中的帖子)中的这个(类型)片段

[merge]
        tool = smartsynchronize
[mergetool "smartsynchronize"]
        cmd = '/C/PATH TO/smartsynchronize.exe' "$LOCAL" "$REMOTE" "$MERGED"
        trustExitCode = false
于 2014-01-20T10:45:18.737 回答