OS X上的git + DiffMerge问题

时间:2010-12-14 12:43:07

标签: git macos diffmerge

我已使用以下说明将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时,我收到以下错误:

DiffMerge Error

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

1 个答案:

答案 0 :(得分: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"'