如何让mercurial外部差异工具处理文件重命名?

时间:2010-11-17 17:21:56

标签: mercurial beyondcompare

如果我提交文件重命名并使用extdiff查看Beyond Compare或kdiff3中的差异,它们会在每一侧显示两个不同的文件。

使用Beyond Compare我可以手动从每一侧挑选任意文件进行比较,但如果我有很多重命名(即更改重命名的java包名),那将是一个巨大的痛苦。

我理解为什么会这样:extdiff只为diff工具制作两个临时快照目录。

所以我的问题是:有没有办法将重命名传递给diff工具,以便它将旧文件名与新文件名进行比较?

这可能是每个差异工具特有的。因此,如果您知道支持它的工具,请告诉我。

2 个答案:

答案 0 :(得分:1)

注意这仅适用于使用TortoiseHg的差异。

我使用Beyond Compare 3配置Mercurial安装的方式如下:

(注意,这些只是与差异和合并相关的选项,您仍然需要在某些相同部分中使用其他选项,因此只需添加或更改,不要清除旧部分并替换为以下部分)

[ui]
merge = bc3m

[extensions]
extdiff=

[extdiff]
cmd.bc3d = C:\Program Files (x86)\Beyond Compare 3\bcomp.exe
opts.bc3d = /lro

[merge-tools]
bc3m.executable = C:\Program Files (x86)\Beyond Compare 3\bcomp.exe
bc3m.args = $local $other $base $output /automerge /reviewconflicts /closescript /lro /rro /title1="Left parent" /title2="Right parent" /title3="Common base" /title4="Merged output"
bc3m.priority = 1
bc3m.premerge = True
bc3m.gui = True

[tortoisehg]
vdiff=bc3d

现在:

  • 如果可能,自动合并,除非出现合并冲突,否则不会显示合并GUI。
  • 重命名文件的差异显示左侧的旧文件名和右侧的新文件名(虽然是时髦的临时目录名称)

重要提示:不要对合并工具和差异工具使用相同的名称(两者都使用bc3)。它混淆了所涉及的工具,并且只是向BC的启动屏幕发展。这就是合并工具命名为bc3m而diff工具命名为bc3d。

的原因

另请注意,我已使用内置的beyondcompare工具,因为它们似乎配置不正确。特别是,使用内置工具时没有发生自动合并部分,但现在效果很好。此外,使用内置工具,使用重命名可视化差异显示目录比较或只是在BC的启动屏幕上进行操作,这使您可以选择所需的比较类型。

所以最后我只是进行了实验,直到我找到了正确的选项并自己设置了所有内容。

答案 1 :(得分:0)

处理重命名需要深入了解典型scm所具有的历史。特别是像Mercurial这样的dvcs。这就是他们可以处理重命名的方式。

有些感兴趣的事情可能是Git不跟踪重命名,对内容进行操作并且重命名无关紧要。

Diff工具可以处理检查更改,但它不能告诉其中的文件。如果文件已被重命名,则前面的历史记录也是错误的。任何外部差异工具通常会检查内容,因此提供文件的任务将保留给用户。

然而,Mercurial会跟踪重命名。请参阅可用于跟踪重命名文件的this extentsion。您可以使用它为任何外部差异工具提供正确的文件名进行比较。