GNU diff的替代品?

taw*_*taw 5 diff

diff通常产生相当无能的输出.这是一个很好的例子.如果我们从这开始:

class World
  def hello
    puts "Hello, world"
  end
  def goodbye
    puts "Goodbye, world"
  end
end
Run Code Online (Sandbox Code Playgroud)

删除第二个方法并更改第一个方法:

class World
  def hello
    puts "Hello, #{self}"
  end
end
Run Code Online (Sandbox Code Playgroud)

diff -u 将是一团糟 - 建议合并两种方法:

 class World
   def hello
-    puts "Hello, world"
-  end
-  def goodbye
-    puts "Goodbye, world"
+    puts "Hello, #{self}"
   end
 end
Run Code Online (Sandbox Code Playgroud)

而不是更合理:

 class World
   def hello
-    puts "Hello, world"
+    puts "Hello, #{self}"
   end
-  def goodbye
-    puts "Goodbye, world"
-  end
 end
Run Code Online (Sandbox Code Playgroud)

这只是一个玩具示例,所以diff输出仍然可以理解 - 实际上它通常会变得更糟.

有没有其他选择diff可能会更聪明一些?

Ira*_*ter 1

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

它是特定于语言的;必须以语言结构为指导。它使用明确的语言定义。我不太清楚你使用的是什么语言(Python?)。有适用于多种语言的智能差异工具,包括 C、C++、C#、Java、Python、Fortran、COBOL 等