Альтернативы GNU diff? - PullRequest
       8

Альтернативы GNU diff?

5 голосов
/ 29 июля 2010

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, которые могут быть несколько умнее?

Ответы [ 3 ]

2 голосов
/ 13 сентября 2012

rfcdiff (Draft Diff Tool) сообщил об этом:

enter image description here

Инструмент использует GNU diff и wdiff.

1 голос
/ 25 мая 2011

Я работаю над алгоритмом сравнения, который делает именно то, что вам нужно, но этот алгоритм, над которым я работаю, не имеет ограничений по количеству источников для процесса сравнения.В настоящее время он находится в бета-версии и все еще тестируется, и пока это тестирование не будет завершено, встроенное представление не работает.Пожалуйста, проверьте его и дайте мне знать, если и как вы можете разбить отчет о различиях, чтобы я мог предоставить соответствующие исправления.

Сайт: http://prettydiff.com/ ( GitHub )

1 голос
/ 31 июля 2010

Вы можете рассмотреть наш SD Smart Differencer .Он предоставляет различия на основе структуры кода, а не «различий строк», поэтому он ориентирован на элементы языка (выражения, операторы, блоки, методы) и действия редактирования (удаление, вставка, копирование, замена, переименование).*

Это зависит от языка;это должно быть использование языковой структуры в качестве руководства.Он использует явное определение языка.Я не могу точно сказать, какой язык вы используете (Python?).Существуют инструменты Smart Differencer для многих языков, включая C, C ++, C #, Java, Python, Fortran, COBOL, ...

...