我已使用以下说明将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
时,我收到以下错误:
这个问题可能是什么原因?
答案 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"'