我将git配置为使用 SmartSynchronize 作为合并工具,但是当我运行git mergetool
时,我仍然会看到冲突标记,如下所示:
我正在使用 P4Merge 并看到它处理这些冲突标记,但我真的很喜欢在屏幕中间查看合并文件,如 SmartSynchronize ;所以我做错了什么,或者这个工具是否无法处理冲突标记?
我的.gitconfig
:
[mergetool "smartsynchronize"]
cmd = '/C/Program Files (x86)/SmartSynchronize 3.3/bin/smartsynchronize.exe' "$LOCAL" "$REMOTE" "$MERGED"
(另外,如果你知道一种方法让 P4Merge 在中间显示合并文件,我很想知道)
答案 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