2013-12-17 30 views
6

在計算機A上運行git mergetool超越比較3預期。在機器B上,BC3啓動,但不在命令行中傳遞任何參數,因此顯示介紹屏幕而不是實際的合併。Git的啓動合併工具不帶任何參數

我複製從機器A到機器B的配置,並且git config --list是從安裝路徑和push.default=simple開的相同:

merge.tool=bc3 
mergetool.bc3='C:/Apps/BeyondCompare3/BCompare.exe' 
mergetool.bc3.cmd='C:/Apps/BeyondCompare3/BCompare.exe' 
mergetool.bc3.path=C:\Apps\BeyondCompare3\bcomp.exe 
push.default=simple 

唯一的其他區別是機器A具有的git 1.7.11 Win7的64下而機器B(不工作的那個)在Win8 32位下具有git 1.8.4。

ProcessHacker表明計算機A上的命令行(對於完全相同存儲庫中,對於位比特)爲:

"c:\Program Files (x86)\Beyond Compare 3\bcomp.exe" 
     ./somefile.cs.LOCAL.4192.cs 
     ./somefile.cs.REMOTE.4192.cs 
     ./somefile.cs.BASE.4192.cs 
     -mergeoutput=somefile.cs /BCompWnd=$00140644 

而虛線機器B上,它只是:

c:\Apps\BeyondCompare3\BCompare.exe 

我需要哪種魔法咒語?

+1

爲什麼配置機器之間不變,而工具是在不同的文件夾? – CharlesB

+0

@CharlesB就像我說的那樣,配置「與安裝路徑完全相同」,如果不清楚,很抱歉。路徑是不同的,其他的都是一樣的。 –

回答

4

只是猜測:如果Git已經(在其工廠配置中)知道bc3工具,它將使用mergetool.bc3.path以及標準參數。如果不是,它看起來mergetool.bc3.cmd,但是這一次需要有在命令中指示正確的參數:

mergetool.bc3.cmd="'c:/apps/BeyondCompare3/bcomp.exe' '$LOCAL' '$REMOTE' '$BASE' '$MERGED'" 

對於模糊的原因,在機器B Git不會知道的bc3調用,將回退到使用mergetool.bc3.cmd這在你的情況下錯過了正確的論點。在機器A上,Git知道如何與BC3交談,並且只使用mergetool.bc3.path來正確調用工具。

要在機器A和B上分別驗證此刪除mergetool.bc3.cmdmergetool.bc3.path,行爲應該與您觀察的完全相同。

爲了解決這個問題,使用完整的調用上mergetool.bc3.cmd

+1

好的,這工作。如果我刪除'cmd'和'path',兩臺機器都報告他們找不到BC3。如果我刪除'cmd'但是保留'path',兩臺機器都可以工作。所以看起來,機器A只能在原始設置中工作,因爲git完全忽略了mergetool.bc3.cmd。另外,'mergetool.bc3'本身似乎是不必要的。謝謝! –

+0

您可能在機器A上有一個'[mergetool'bc3']'條目,但不在機器B上。嘗試在兩臺機器上:'git config --global --edit'。 –