代码之家  ›  专栏  ›  技术社区  ›  Geoffrey Zheng

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

  •  1
  • Geoffrey Zheng  · 技术社区  · 15 年前

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

    通过比较,我可以手动从两边选择任意文件进行比较,但是如果我有很多重命名(即改变一个Java包名用于重构),这将是一个巨大的痛苦。

    我理解其原因:extdiff只是为diff工具创建了两个临时快照目录。

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

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

    2 回复  |  直到 15 年前
        1
  •  1
  •   Lasse V. Karlsen    15 年前

    注释 这只适用于陆龟的diff。

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

    (注意,这些只是与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
    

    现在:

    • 如果可能,自动合并,除非存在合并冲突,否则不显示合并gui
    • 用于重命名文件的DIFF显示左边的旧文件名和右边的新文件名(尽管时髦的临时目录名)

    重要注意事项 不要为合并工具和DIFF工具使用相同的名称(如两者的BC3)。它混淆了所涉及的工具,只将Punt与BC的启动屏幕相混淆。这就是为什么合并工具名为bc3m,而差异工具名为bc3d。

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

    所以最后我只是尝试,直到我找到了正确的选择,并设置自己的一切。

        2
  •  0
  •   pyfunc    15 年前

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

    一些有趣的事情可能是,git不跟踪重命名,对内容进行操作,重命名也不重要。

    DIFF工具可以处理检查的变化,但它不能告诉它里面的文件。如果使用前面的历史记录来判断文件是否已重命名,则也会出错。任何外部差异工具通常检查内容,因此提供文件的任务将保留给用户。

    无论如何,Mercurial都会进行跟踪重命名。见 this extentsion 可用于跟踪重命名文件的。您可以使用它来提供任何外部差异工具来比较正确的文件名。

    推荐文章