如何使用WinMerge作为Mercurial的差异工具


19

我正在使用Mercurial分布式版本控制系统,并且想知道如何配置它以使用WinMerge而不是其自己的内部差异工具。我已经有WinMerge作为合并工具,但是我希望Mercurial在键入时使用WinMerge:

hg diff

有什么办法做到这一点,还是我停留在Mercurial的内部差异工具上?

Answers:


24

TortoiseHg常见问题解答

将这些行添加到您的个人Mercurial.ini文件中

[扩展名]
extdiff =

[extdiff]
cmd.winmerge = C:\ Program Files \ WinMerge \ WinMergeU.exe
opts.winmerge = / e / x / u / wl

现在运行全局设置工具。在TortoiseHg选项卡上,您应该在Visual Diff Command的下拉列表中看到可用的winmerge。选择winmerge,应用,然后关闭。

可以使用这种相同的方法来添加几乎所有可视化diff工具,但是请注意,如果要使用TortoiseHg使用diff工具,则该diff工具必须能够支持目录diff,除非您使用的是0.8版或更高版本。

乔尔还提供了解决方案在此情况下,你在Cygwin下运行水银。

WinMerge命令行参数的解释在这里。摘要:

  • /e 使您可以通过按一次Esc键关闭WinMerge
  • /x 当您开始比较相同文件时,关闭WinMerge(在显示信息对话框之后)
  • /u 阻止WinMerge将路径(左或右)添加到“最近使用”(MRU)列表中
  • /wl 以只读方式打开左侧

我没有使用TortoiseHG,也没有在Cygwin下运行Mercurial。我正在使用mercurial.berkwood.com的默认命令行Mercurial安装程序。从我能够键入'hg winmerge <file>'来查看它与先前版本之间的差异的意义上说,您的解决方案有效,但是'hg diff <file>'仍然显示相同的(相当难看)差异工具。尽管如此,它总比没有好。
09年

我认为此答案假定您将在TortoiseHg目录(例如C:\ Program Files \ TortoiseHg)中编辑Mercurial.ini。如果您在Mercurial目录中编辑一个(例如C:\ Program Files \ Mercurial),那么它将不起作用(至少对我而言不起作用)。
阿什莉·戴维斯

还c:\ Program Files(x86)\ WinMerge \ WinMergeU.exe
Avram

确保在配置文件中不要在WinMerge的路径两边加上引号,否则它将不起作用。
Drealmer

7

这就是它的工作方式-除了Tortoisehg之外,纯纯的命令行

首先,编辑文件(在64位Windows下)

C:\ Program Files(x86)\ Mercurial \ Mercurial.ini

[extensions]
; must uncomment this line
extdiff =

[extdiff]
; i'm using winmerge unicode version
cmd.winmerge = C:\Program Files (x86)\WinMerge\WinMergeU.exe
; it explains winmerge command line parameters here: http://winmerge.org/docs/manual/CommandLine.html
opts.winmerge = /r /e /x /u /wl

然后,您可以使用“ hg winmerge ...”代替“ hg diff ...”


我发现在后台运行winmerge非常有用,因此我可以在设置提交消息时查看更改,并在命令行上显示有关哪些文件已更改的统计信息。为此,将一个批处理文件放入包含start / b hg winmerge <NEWLINE> hg diff --stat
danio 2010年

3

好吧,前面给出的答案并没有给我想要的效果。他们不允许进行差异修订和就地编辑(我的意思是从盒子中可使用TortoiseSVN的相同功能)。为此,我在此部分中另外添加了mercurial.ini:

[merge-tools]
winmerge.regkey=Software\Thingamahoochie\WinMerge\
winmerge.regname=Executable
winmerge.priority=-10
winmerge.args=/e /x /wl /ub /dl other /dr local $other $local $output
winmerge.fixeol=True
winmerge.checkchanged=True
winmerge.gui=True
winmerge.diffargs=/r /e /x /ub /wl /dl '$plabel1' /dr '$clabel' $parent $child
winmerge.diff3args=
winmerge.dirdiff=True

这取自http://blog.stevehorn.cc/blog/easy-mercurial-visual-diff-between-two.html

By using our site, you acknowledge that you have read and understand our Cookie Policy and Privacy Policy.
Licensed under cc by-sa 3.0 with attribution required.