8

我已使用以下说明将 Sourcegear DiffMerge 配置为我的默认 git 合并工具:

git config --global diff.tool diffmerge
git config --global difftool.diffmerge.cmd "diffmerge \"\$LOCAL\" \"\$REMOTE\""

git config --global merge.tool diffmerge
git config --global mergetool.diffmerge.cmd "diffmerge --merge --result=\"\$MERGED\"
\"\$LOCAL\" \"\$BASE\" \"\$REMOTE\""
git config --global mergetool.diffmerge.trustexitcode false

资料来源:http ://www.andrejkoelewijn.com/wp/2010/01/08/configure-diffmerge-with-git/

但是,当我运行时git mergetool,出现以下错误:

差异合并错误

这个问题的原因可能是什么?

4

1 回答 1

8

可能没有$BASE文件,例如,如果要合并的两个文件没有共同的祖先,或者如果您在应用或重新定位补丁而不是合并分支时碰巧遇到冲突。在这种情况下,虽然$BASE仍然会设置变量,但那里不会有文件。

在您的 mergetool 命令中,您需要检查是否$BASE存在,如果不存在,则在没有共同祖先的情况下进行合并。看起来 DiffMerge 不支持该模式(它支持合并两个没有共同祖先的文件,但它总是将输出写入其中一个文件,而不是结果文件)。相反,如果不存在,您需要$LOCAL作为$BASE文件传入:$BASE

git config --global mergetool.diffmerge.cmd 'diffmerge --merge --result="$MERGED" "$LOCAL" "$(if test -f "$BASE"; then echo "$BASE"; else echo "$LOCAL"; fi)" "$REMOTE"'
于 2011-04-18T17:53:13.287 回答