GNU diff的替代方案是什么?

6

diff 常常输出比较晦涩的结果。以下是一个不错的例子。如果我们从这里开始:

class World
  def hello
    puts "Hello, world"
  end
  def goodbye
    puts "Goodbye, world"
  end
end

放弃第二种方法,改用第一种方法:

class World
  def hello
    puts "Hello, #{self}"
  end
end

diff -u会是一团糟 - 表示两种方法已经合并:

 class World
   def hello
-    puts "Hello, world"
-  end
-  def goodbye
-    puts "Goodbye, world"
+    puts "Hello, #{self}"
   end
 end

不是更加合理:

 class World
   def hello
-    puts "Hello, world"
+    puts "Hello, #{self}"
   end
-  def goodbye
-    puts "Goodbye, world"
-  end
 end

这只是一个玩具示例,因此diff的输出仍然可以理解 - 在实践中通常会更糟。

是否有任何替代diff可能更加智能的工具?


1
你想要仅CLI,还是像KDIFF这样的图形应用程序也可以? - OMG Ponies
是的,我也是这么想。在我看来,Kompare实际上是最好的差异比较工具之一。如果你不解析输出,基于GUI的差异比CLI diff更容易使用。 - Gilead
1
我不想为糟糕的差异获得更好的显示效果,我想要好的差异。这看起来可能与此相关 - taw
3个回答

2

这是 rfcdiff(草案差异工具)的报告:

enter image description here

该工具使用 GNU diff 和 wdiff。


1
我正在开发一个差异算法,它可以完全满足您的需求。但是,这个算法没有对差异处理的源数量进行限制。目前,该算法仍处于测试阶段,直到测试完成为止,内联视图将无法正常工作。请查看并告诉我如何打破差异报告,以便我提供适当的更正。
网站:http://prettydiff.com/ (GitHub)

1

您可以考虑使用我们的SD Smart Differencer。它基于代码结构提供差异,而不是“行差异”,因此它专注于语言元素(表达式、语句、块、方法)和编辑操作(删除、插入、复制、替换、重命名)。

它是特定于语言的;必须使用语言结构作为指南。它使用明确的语言定义。我无法确定您使用的是哪种语言(Python?)。有许多语言的智能差异工具,包括C、C++、C#、Java、Python、Fortran、COBOL等。


1
这个例子是用Ruby写的。Smart Differencer似乎只支持Windows,而且不支持我想要的大多数语言(他们对C预处理器的说法意味着它甚至不能比较大多数C代码),闭源(对于开发工具来说非常糟糕),而且我甚至不确定是否有试用版可供下载以查看其是否有效。也许其他人会觉得它有用。 - taw
你想要哪些语言?是的,由于预处理器指令和宏调用的任意放置,C代码存在限制,这使得在任意C代码中识别代码结构非常困难。它目前不支持Ruby;我们尝试过Ruby语言定义,但它还没有准备好。是的,它是闭源的;您可以编写开源版本。您在问题中没有说明任何这些约束条件。有可用于各种语言的评估版本,包括Java、C#和C++。您可能需要在网站上询问。 - Ira Baxter

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接