在机器A上,git mergetool
按预期超出比较3。在机器B上,BC3启动,但没有在命令行上传递任何参数,因此显示的是简介屏幕,而不是实际的合并。
我将配置从机器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在Win7 64位下有Git 1.7.11,而机器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
我这里需要哪种咒语?
最佳答案
猜测一下:如果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.cmd
和mergetool.bc3.path
,行为应与您观察到的完全相同。要修复它,请使用
mergetool.bc3.cmd
上的完整调用。