在机器 A 上,git mergetool
按预期运行"超出比较 3"。在计算机 B 上,BC3 启动,但未在命令行上传递任何参数,因此显示介绍屏幕而不是实际合并。
我将配置从机器 A 复制到机器 B,除了安装路径和push.default=simple
外git config --list
相同:
merge.tool=bc3
mergetool.bc3='C:/Apps/BeyondCompare3/BCompare.exe'
mergetool.bc3.cmd='C:/Apps/BeyondCompare3/BCompare.exe'
mergetool.bc3.path=C:AppsBeyondCompare3bcomp.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 3bcomp.exe"
./somefile.cs.LOCAL.4192.cs
./somefile.cs.REMOTE.4192.cs
./somefile.cs.BASE.4192.cs
-mergeoutput=somefile.cs /BCompWnd=$00140644
而在损坏的机器 B 上,它只是:
c:AppsBeyondCompare3BCompare.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
上的完整调用。