【问题标题】:How to let mercurial external diff tool deal with file rename?如何让 mercurial 外部差异工具处理文件重命名?
【发布时间】:2010-11-17 17:21:56
【问题描述】:

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

使用 Beyond Compare,我可以从每一侧手动选择任意文件进行比较,但如果我有很多重命名(即更改 Java 包名称以进行重构),那就太痛苦了。

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

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

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

【问题讨论】:

    标签: mercurial beyondcompare


    【解决方案1】:

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

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

    (注意,这些只是diff和merging相关的选项,在一些相同的部分你还需要其他选项,所以只添加或更改,不要清除你的旧部分并替换为下面的部分)

    [用户界面] 合并 = bc3m [扩展] 扩展差异= [扩展差异] cmd.bc3d = C:\Program Files (x86)\Beyond Compare 3\bcomp.exe opts.bc3d = /lro [合并工具] 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 = 真 bc3m.gui = 真 [乌龟] vdiff=bc3d

    现在:

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

    重要提示:不要为合并工具和差异工具使用相同的名称(如两者的 bc3)。它混淆了所涉及的工具,并且差异只是平底船到 BC 的启动屏幕。这就是为什么合并工具被命名为 bc3m 而差异工具被命名为 bc3d。

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

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

    【讨论】:

    • 你的意思是这样做:mkdir rename; cd rename; hg init; touch file1; hg ci -A -m file1; hg mv file1 file2; hg ci -m file2; hg bc3d -r0:1 将比较 file1 和 file2?不幸的是,不适用于我的配置。
    • 让我测试一下这个场景,我并不是说它会处理所有问题,但我所做的重命名似乎有效。
    • 啊,抱歉,我一直使用 TortoiseHg,如果我在 1-revision 上使用“Visualize Change”,在弹出的对话框中选择“A file2”条目,它会在左窗格和右窗格中的 file2。
    • 我明白了。请问您的 TortoiseHg 版本是多少?
    【解决方案2】:

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

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

    Diff 工具可以处理检查更改,但它不能说明其中的文件。判断文件是否已重命名的先前历史记录也将是错误的。任何外部 diff 工具通常都会检查内容,因此提供文件的任务将由用户完成。

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

    【讨论】:

    • 我知道 hg 曲目重命名,所以我要问的是一种“为任何外部差异工具提供正确的文件名进行比较”的自动方式。为此编写一个小扩展并不难,但棘手的部分是告诉工具显示这对,以及文件中的其他更改而不重命名。
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2010-12-04
    • 1970-01-01
    • 2022-11-30
    • 2012-11-28
    • 2018-11-14
    相关资源
    最近更新 更多