总结:
当 TortoiseHG/Mercurial 调用 WinMerge 时,它似乎会按标准传递
/e
命令行参数。如何配置才能不传递命令行参数?
详情:
我在 Windows 7 上使用 TortoiseHG(2.10.1) 和 WinMerge (2.14.0)。 Mercurial 全局设置配置为使用 WinMerge 进行 vdiff 和合并。
调用 WinMerge 时,
/e
命令行参数表示第一次按下 Esc 键会关闭 WinMerge。
我的问题是,当我双击 WinMerge 中更改文件列表中的文件时,它会打开一个新选项卡,单击 Esc 会关闭 WinMerge,而不仅仅是单个文件比较选项卡。我希望能够按 Esc 键关闭 just 单个文件比较选项卡...据我所知,删除
/e
即可做到这一点。
不幸的是,我不知道如何获取配置文件来做到这一点。
这是我目前拥有的配置文件...
[ui]
username = {removed for StackOverflow}
merge = winmergeu
[tortoisehg]
vdiff = winmergeu
initialrevision = workingdir
[extdiff]
cmd.winmerge= C:\Program Files\WinMerge\WinMergeU.exe
opts.winmerge= /x /ub /wl
[extensions]
hgext.convert=
mercurial_keyring=
mq=
rebase =
[web]
我还尝试更改
cmd.winmerge
和 opts.winmerge
以使用 winmergeu
补充:
我也刚刚尝试将
hgext.extdiff=
添加到 [extensions]
部分,以及以下内容......但仍然没有运气。
[merge-tools]
winmerge.regkey=Software\Thingamahoochie\WinMerge\
winmerge.regname=Executable
winmerge.priority=-10
winmerge.args=/x /wl /ub /dl other /dr local $other $local $output
winmerge.fixeol=True
winmerge.checkchanged=True
winmerge.gui=True
winmerge.diffargs=/r /x /ub /wl /dl '$plabel1' /dr '$clabel' $parent $child
winmerge.diff3args=
winmerge.dirdiff=True
(此信息来自此博客)
编辑文件
C:\Program Files\TortoiseHg\defaultrc\MergeTools.rc
。
它有一个 WinMerge 部分,如下所示:
winmergeu.args=/e /x /u /wl /wr /dl local /dr other $local $output $other
winmergeu.checkchanged=True
winmergeu.diff3args=/r /e /x /u /wl /wr /dl '$plabel1' /dm '$clabel' /dr '$plabel2' $parent1 $child $parent2
winmergeu.diffargs=/r /e /x /u /wl /dl '$plabel1' /dr '$clabel' $parent $child
...
事实上,第 1、3、4 行中存在
/e
选项,这似乎分别是用于 3 路合并、3 路差异和 2 路差异的选项。
编辑后(以管理员身份),重新启动 THG Workbench。
如果您在调试正在发生的情况时遇到困难,可以使用 Process Explorer 等工具来检查传递到正在运行的 WinMerge 进程的实际命令行。 (在进程列表中细化winmerge.exe并查看其属性)。
我必须说,我不太喜欢在 Program Files 下编辑文件,但我还没有找到其他方法来做到这一点。
我已经用 THG 6.3.2 尝试过了。