使用Mercurial和Beyond Compare 3(BC3)作为差异工具?

29
在Windows中,我可以使用 mercurial.ini 来将 winmerge 作为hg的外部差异工具。使用一些在网上可以找到的选项开关(我认为是一个日本网站),例如:
 hg winmerge -r1 -r2 
这将在 winmerge 中列出修改过的文件(s)与 rev1 和 rev2 之间的不同之处。然后我只需单击要进行比较的文件。
但是对于bc3:
 hg bcomp -r1 -r2 
这会使 bc3 打开一个对话框,指出找不到临时目录。
我能够使用 bc3 和 hg 做的最多就是:
 hg bcomp -r1 -r2 myfile.cpp 
这将打开 myfile.cpp 的 rev1 和 rev2 之间的差异。
所以,似乎 hg+bc3 无法成功确认版本之间所有文件的更改,只能一次比较一个文件。 有人可以更好地使用 bc3 + hg 吗?
编辑:问题已解决!
从 http://www.scootersoftware.com/support.php?zz=kb_vcs.php>scooter 支持页面上获得了解决方案。我必须使用 bcompare 而不是 bcomp。以下是我的 mercurial.ini 片段:
[extensions]
hgext.win32text =
;mhd adds hgext.extdiff =
;mhd adds for bc [extdiff] cmd.bc3 = bcompare opts.bc3 = /ro
;mhd adds for winmerge ;[extdiff] ;cmd.winmerge = WinMergeU ;opts.winmerge = /r /e /x /ub

谢谢您的发布,我刚遇到这个。 - Jason S
9个回答

31

Beyond-Compare-3是一款很棒的工具。 我建议对设置进行一些微调:

[extensions]
extdiff =

[extdiff]
cmd.bcomp = C:\Program Files\Beyond Compare 3\BCompare.exe
opts.bcomp = /leftreadonly

[merge-tools]
bcomp.executable = C:\Program Files\Beyond Compare 3\BComp
bcomp.args = /leftreadonly /centerreadonly $local $other $base $output
bcomp.priority = 1

[ui]
merge = bcomp

[tortoisehg]
authorcolor = True
vdiff = bcomp

你能解释一下 "opts.bcomp = /leftreadonly" 是什么意思吗? - Ibn Saeed
正如开关名称所示“左只读”,它导致左侧成为只读状态。由于左侧通常显示历史版本(由临时文件表示),因此尝试编辑或保存它毫无意义。 - Refael Ackermann
3
在使用Linux版本的BCompare时,请确保在参数前加上--(例如--leftreadonly),以确保正确执行命令。 - miracle2k

12

个人认为最好的Beyond Compare配置可以在Mercurial mergetools.rc文件中找到:

[merge-tools]
....
; Windows version of Beyond Compare
beyondcompare3.args=$local $other $base $output /ro /lefttitle=local /centertitle=base /righttitle=other /automerge /reviewconflicts /solo
beyondcompare3.regkey=Software\Scooter Software\Beyond Compare 3
beyondcompare3.regname=ExePath
beyondcompare3.gui=True
beyondcompare3.priority=-2
beyondcompare3.diffargs=/lro /lefttitle='$plabel1' /righttitle='$clabel' /solo /expandall $parent $child
我也发现不将Beyond Compare包含在“extdiff”部分中非常重要,这样它将使用“merge-tools”部分中的“beyondcompare3”和“diffargs”参数。(我在“ui.merge”和“tortoisehg.vdiff”中都指定了“beyondcompare3”)

3
如果您在BC中不断收到“文件夹不可用”的错误(当我同时打开多个BC实例时,我也会遇到此问题),请尝试在命令行中添加选项/solo,例如:
[extdiff]
cmd.bcomp = C:\Program Files\Beyond Compare 3\BCompare.exe
opts.bcomp = /leftreadonly /solo

Source: Scooter Software support forum


1
谢谢,那真是拯救了我。“Solo” 是什么意思? - Dov

3

我在我的机器上添加了以下内容才能使其工作:

[extensions]
extdiff =

[extdiff]
cmd.bc3 = C:\Program Files\Beyond Compare 3\BCompare.exe
opts.bc3 = /ro

我不使用绝对路径,因为我在Windows环境变量中设置了bc3路径。 - mhd

3
请查看Scooter Software支持页面上的此页面,它还包括大多数版本控制系统的设置 - 这是我的书签列表之一!
代码片段:
要配置Mercurial,您需要编辑文件%USERPROFILE%\ Mercurial.ini或$ HOME / .hgrc。如果已经存在,请使用现有的INI部分添加以下行: Diff
[extensions] extdiff =

[extdiff] 
cmd.bcomp = C:\Program Files\Beyond Compare 3\BCompare.exe
opts.bcomp = /ro

[tortoisehg] vdiff = bcomp 

一旦设置完成,您可以使用命令行比较修订版本

hg bcomp -r <rev1> [-r <rev2>] [<filename>]

3-Way Merge (v3 Pro)

[merge-tools] 
bcomp.executable = C:\Program Files\Beyond Compare 3\BComp 
bcomp.args = $local $other
$base $output bcomp.priority = 1
bcomp.premerge = True bcomp.gui = True

[ui] merge = bcomp

1

我尝试了当时给出的建议,但都没有起作用。

我发现以下方法可行:

  1. 将Beyond Compare安装目录添加到您的系统path
  2. 打开全局设置并将差异工具设置为bcompare

现在尝试使用Beyond Compare进行比较吧!


1
到目前为止给出的所有答案都是针对 Windows 的。这里是我为那些使用 Linux 的人配置的。

差异

[extensions]
extdiff =

[extdiff]
cmd.bcomp = bcompare
opts.bcomp = -ro1

四向合并(v3 Pro)

[merge-tools]
bcomp.executable = bcompare
bcomp.args = -title1='First Parent' -title2='Second Parent' -title3='Common Ancestor' -title4='Output' -ro1 -ro2 -ro3 $local $other $base $output
bcomp.premerge = True
bcomp.gui = True

-ro#:禁用指定侧面的编辑

-title#=<title>:在路径编辑中显示描述而不是文件名

# 字符:1=左,2=右,3=中央,4=输出

有关更多 bcompare 的选项,请在控制台中执行bcompare -help


这会打开3路合并与2.10 :( - paulm

0

如果您在配置解析方面遇到问题,请注意任何变量或部分名称的空格都会导致配置解析不正确。我曾经复制和粘贴不同的配置文件,但仍然出现错误。最终发现许多变量前添加了空格,导致无法解析。


0
如果您正在使用TortoiseHg,您可以通过选择文件->设置,然后在TortoiseHg选项上选择Visual Diff Tool和Three-way Merge Tool来将合并工具设置为Beyond Compare。此设置也会影响通过命令行设置的合并操作。

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接