2010-07-29 4 views
5

diff обычно производит довольно бесшумный выход. Вот хороший пример. Если мы начнем с этого:Альтернативы GNU 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? –

+0

Да, я собирался сказать. Kompare на самом деле один из лучших отличий там, ИМО. Если вы не разбираете вывод, различия в графическом интерфейсе намного проще в работе, чем в CLI diff. – Gilead

+1

Мне не нужен лучший дисплей для плохих различий, я хочу хорошие отличия. [Похоже, это может быть актуально] (http://alfedenzo.livejournal.com/170301.html). – taw

ответ

1

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

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

+1

Пример в Ruby. Smart Differencer выглядит как Windows-only, без поддержки большинства языков, которые я хочу (и то, что они говорят о препроцессоре C, подразумевает, что он даже не сможет отличить большинство C), закрытый источник (очень плохая идея для инструментов разработки) и Я даже не уверен, доступна ли пробная загрузка, чтобы увидеть, работает ли она вообще. Возможно, некоторые другие люди посчитают это полезным. – taw

+0

На каких языках вы хотели? Да, существуют ограничения с кодом C из-за произвольного размещения директив препроцессора и вызовов макросов; это затрудняет идентификацию структуры кода в произвольном C-коде. В настоящее время он не работает с Ruby; мы играли с определением языка Ruby, но оно еще не готово. Да, это закрытый источник; вы можете написать версию с открытым исходным кодом.Вы не указали ни одно из этих ограничений в своем вопросе. Доступны оценочные версии для самых разных языков, включая Java, C# и C++. Возможно, вам придется спросить на сайте –

1

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

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

2

The rfcdiff (Проект Diff Tool) сообщил об этом:

enter image description here

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

Смежные вопросы