2010-12-14 24 views
8

我已經配置Sourcegear DiffMerge使用下面的說明是我的默認的git合併工具:問題的混帳+ DiffMerge在OS X

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

可能是什麼這個問題的原因是什麼?

+0

將具有中間腳本幫助?正如在http://stackoverflow.com/questions/3780420/is-it-possible-to-use-winmerge-to-view-git-diffs-from-cygwin/4314057#4314057 – VonC 2010-12-14 13:39:08

+0

你能夠運行diffmerge命令在使用git的終端之外? – brycemcd 2010-12-14 16:04:10

+1

我看到同樣的事情。 BASE文件不存在於本地文件系統中,但diffmerge命令行中引用的其他文件(在本例中爲10new.xml.REMOTE.2128.xml和10new.xml.LOCAL.2128.xml)確實存在。 DiffMerge對Git行爲的期望(可能是Git版本行爲)的問題? – 2010-12-19 23:39:30

回答

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"' 
+0

哇真棒,看起來像唯一的其他選擇是使用付費的Git mergetools。很好,謝謝。 – Amala 2011-04-29 17:49:56

+2

真棒提示布賴恩!我已經將它合併到我的Git/DiffMerge設置HOWTO:http://twobitlabs.com/2011/08/install-diffmerge-git-mac-os-x/ – ToddH 2011-08-18 19:57:03

+0

@HamishGrubijan啊,謝謝。 – 2013-03-12 19:02:41