我一直在关注这篇关于如何在 git 中使用 Winmerge 作为差异工具的帖子。最初它不起作用(现在好了,因此与我的问题无关)。一个关键区别是我使用的是 MSYS2 内部提供的 git ,而不是本机 Windows 环境下的msysgit 。相关的 git config 片段是:
[diff]
guitool = winmerge
[difftool "winmerge"]
cmd = \"????/WinMergeU.exe\" /e /s /u /r /wl \"$LOCAL\" \"$REMOTE\"
令我震惊的是,winmerge 的某些命令行选项在执行时已转换为驱动器号,导致失败。之后执行的真正命令git difftool -g
是:
"????\WinMergeU.exe" /e S:/ U:/ R:/ D:/msys64/wl <file1> <file2>
D:/msys64
我的 MSYS2 安装前缀在哪里。请注意错误中的不一致 —/e
未转换、/wl
转换为路径组件,以及所有其他错误为驱动器号。稍后通过使用-
而不是/
作为所有选项的前缀找到解决方案:
[difftool "winmerge"]
cmd = \"????/WinMergeU.exe\" -e -s -u -r -wl \"$LOCAL\" \"$REMOTE\"
我的问题是:
- 为什么不一致的行为?有没有关于如何
cygpath
执行路径转换的参考? - 幸运的是 WinMerge 接受使用
-
作为选项指标。对于那些仅/
接受的 GUI 工具,是否有任何解决方法?