在机器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.cmdmergetool.bc3.path,行为应与您观察到的完全相同。
要修复它,请使用mergetool.bc3.cmd上的完整调用。

08-27 07:04