2010-11-17 63 views
1

如果我提交文件重命名并使用extdiff在Beyond Compare或kdiff3中查看diff,它们会在每一面显示两个不同的文件。如何让mercurial外部diff工具处理文件重命名?

使用Beyond比较,我可以手动从每边比较挑任意文件,但它是一个巨大的痛苦,如果我有很多重命名(即改变为重构一个Java包的名字)。

我明白为什么会这样:extdiff仅为diff工具创建两个临时快照目录。

所以我的问题是:有没有办法传达重命名为比较工具,例如,将与新的文件名比较老的文件名?

这可能是特定于每个diff工具。所以如果你知道一个支持它的工具,请告诉我。

回答

0

处理重命名需要挖掘一个典型的scm具有的历史。特别是像Mercurial的dvcs。那就是这样,他们可以处理重命名。

一些有趣的事情可能是事实,Git不会跟踪重命名,内容运营和重命名并不重要。

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

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

+0

我知道hg曲目重命名,所以我问的是一种有点自动的方式来“提供任何外部差异工具的正确的文件名进行比较”。为此编写一个小扩展并不难,但棘手的部分是告诉该工具显示该对,以及没有重命名的文件中的其他更改。 – 2010-11-17 18:45:41

1

注意这仅适用于与TortoiseHg diff文件。

我已经配置了我的水银安装,与超越的方式比较3,如下:

(注意,这些只是相关diff和合并的选项,你还需要一些其他选项相同的部分,所以只能添加或更改,没有清除旧的部分,并与下面的)

 
[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 

这就是现在更换:

  • 自动合并如果可能的话,不显示合并-G UI除非有合并冲突
  • DIFF为重命名的文件显示在左侧的旧文件名,并在右边新建一个(时髦的临时目录的名称虽然)

重要提示:不要为合并工具和diff工具使用相同的名称(例如bc3)。它混淆了所涉及的工具,并将其差异化为卑诗省的启动屏幕。这就是合并工具名为bc3m而diff工具名为bc3d的原因。

另外请注意,我已经使用内置的beyondcompare工具丢弃,因为他们似乎配置不正确。特别是,使用内置工具时,自动合并部分不会发生,但现在可以很好地工作。此外,使用内置工具,通过重命名可视化差异显示目录比较,或者只是踢到BC的启动屏幕,这使您可以选择所需的比较类型。

所以最后我只是试验,直到我找到正确的选项,并设置好自己。

+0

你的意思是这样做:'mkdir rename; cd重命名; hg init;触摸file1; hg ci -A -m file1; hg mv file1 file2; hg ci -m file2; hg bc3d -r0:1'会比较file1和file2吗?不幸的是,你的配置不适合我。 – 2010-11-17 18:40:25

+0

让我测试一下这个场景,我并不是说它会处理所有的情况,但我所做的重命名似乎有效。 – 2010-11-17 18:48:29

+0

对不起,我总是使用TortoiseHg,如果我在1-revision上使用“Visualize Change”,请在弹出的对话框中选择“A file2”条目,它在左窗格中显示file1,在右边显示file2窗格。 – 2010-11-17 18:50:26