【问题标题】:What tools can I use to view diff of two sections of the same file?我可以使用哪些工具来查看同一文件的两个部分的差异?
【发布时间】:2011-01-14 03:21:03
【问题描述】:

我正在尝试重构一个主要问题是重复代码的 python 模块。

是否有任何工具可以用来查看两个选定部分的差异,以便我可以看到那些几乎相同的代码之间的区别?

【问题讨论】:

  • 如何将这两部分剪切并粘贴到两个新文件中,然后使用任何好的 diff 工具,例如 meld、kdiff3 甚至普通的旧 diff?

标签: python refactoring diff


【解决方案1】:

我在使用 Emacs 之前偶尔会这样做:

  1. 克隆间接缓冲区 (M-x clone-indirect-buffer)。
  2. 标记一个部分并将其缩小 (C-x n n)。
  3. 切换到原始缓冲区并缩小到其他部分。
  4. 在缓冲区及其克隆上运行 Ediff (M-x ediff-two-buffers)。

一个不错的好处是您可以在它们之间合并块并且不会混淆。

【讨论】:

  • 迄今为止最好的解决方案,您可以使用C-x 4 cclone-indirect-buffer
  • 如何在 Vim 中做同样的事情?
【解决方案2】:

虽然我认为界面不是很好,但请查看Clone Digger。见example

Thinking Craftsman's Tool Kit (TC Toolkit) 可能更容易找到重复的代码,但似乎不能提供良好的可视化效果。

编辑:如果你愿意付费,Atomiq 看起来很有趣。

为了获得良好的可视化效果,我使用Diffuse 取得了一些成功,因为它允许任意匹配从一个文件到另一个文件的行:

但是,我实际上必须使用不同的名称复制文件才能正常工作。

【讨论】:

    【解决方案3】:

    我对所有文件差异都使用 ExamDiff Pro。这是一个图形分析器。

    http://www.prestosoft.com/edp_examdiffpro.asp

    【讨论】:

    • 感谢您的推荐,但这仅适用于 Windows。
    【解决方案4】:

    如果您只有一个文件中的克隆并且您知道它们在哪里,那么克隆检测工具可能会过大。但他们检测克隆并将其直接展示给您的能力似乎正是您想要的。

    我们的CloneDR 有一个特定于 Python 的版本。如果它找到克隆(即使在“相同”文件中),它会单独向您显示它们,并根据该语言(Python)规则准确地向您显示它们的不同之处,而不仅仅是布局,包括克隆的位置变化以及它们的变化方式。 (据我了解,Atomiq 只会检测具有完全相同文本行的克隆)。

    CloneDR 在 Windows 下运行良好。

    【讨论】:

      【解决方案5】:

      Beyond Compare 的文本比较有一个“打开剪贴板”命令,该命令会将剪贴板上的任何内容放在比较的一侧。如果您随后复制第二个函数并再次使用该命令,则会将它们对齐并突出显示差异。

      【讨论】:

        猜你喜欢
        • 2021-06-07
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 2011-10-03
        • 1970-01-01
        • 2016-01-27
        • 2011-04-02
        • 2017-08-28
        相关资源
        最近更新 更多