【发布时间】:2015-08-09 00:19:19
【问题描述】:
我一直在关注this post,了解如何在 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 工具,有什么解决方法吗?
【问题讨论】:
-
你在github.com/git-for-windows/git/releasesgithub.com/git-for-windows/git/releases 中使用最近的 git for windows(基于 msys2)尝试了吗?
-
@VonC 谢谢,我一定会试一试,很高兴看到 msysgit 的替代努力使 git 保持最新,尽管我的 OP 是关于运行预打包 git 的版本 里面 MSYS2(现在是2.4.1版)。
标签: git git-diff mingw-w64 winmerge msys2