Инструмент Diff, который игнорирует новые строки [закрыт]

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

это делает его очень трудным (особенно для длинных процедур) увидеть фактические разницы. Я не могу найти бесплатную утилиту diff/merge, которая позволит мне игнорировать newlines (т. е. рассматривать как пробелы). До сих пор я пробовал WinMerge и вне сравнения без успеха. Кто-нибудь знает инструмент diff (идеально свободный), который видел бы эти два примера как идентичные?

Ex. 1:

the quick
brown

Ex. 2:

the
quick
brown

спасибо заранее.

12 ответов


Что я сделал в моем собственном подобном случае является использование sql prettifier который автоматически организует два набора полуразличных SQL очень похожим образом. затем я вставляю и сравниваю результаты с WinMerge.

это двухэтапный процесс, но он гораздо более удобен, чем многие другие варианты, особенно когда задействовано много строк кода.

ссылка на веб-Sql Pretty printer это прилично.


Мне очень нравится в SourceGear DiffMerge!

Он работает на всех платформах и имеет встроенные правил, но позволяет создавать и добавлять свои собственные. Это означает, что вы можете игнорировать то, что хотите, когда хотите.

бонус, это бесплатно!


сравниваем++ является опцией, вы можете попробовать "игнорировать изменения стиля кода" в меню "smart". Он поддерживает структурированное сравнение для многих языков, таких как C/C++, JavaScript, C#, Java ...


вы можете использовать dtp (проект инструмента данных) Eclipse IDE.

чтобы показать это, я создал два почти одинаковых файла SQL и позволил eclipse показать мне различия. После нажатия кнопки "Показать далее"я сделал скриншот.

Как вы можете видеть, он по-прежнему выделяет новые строки, Но, кстати, вы можете сразу увидеть, что они не содержат существенных изменений в SQL. Легко определить, где я изменил идентификатор с 1 на 2.

здесь результат.

alt textalt textalt text


независимо от вашего определения "бесплатно" (пиво против Речи / libre),форматер T-SQL бедняги также доступно для этого, либо с WinMerge (с помощью плагина winmerge), либо вне сравнения и других инструментов сравнения, которые позволяют предварительно форматировать командную строку с помощью массового форматирования командной строки.

Если вы предпочитаете взять его за вихрь, не загружая ничего, он доступен для немедленного использования в интернете (например, его не-libre аналоги T-SQL Tidy, Мгновенный форматер SQL и т. д.):

http://poorsql.com


Я люблю Araxis слияния. Не бесплатно, но оно того стоит. он может, среди прочего, игнорировать любые пробелы, если вы хотите.


Другой альтернативой является Ediff Emacs. Отлично работает, если вы не боитесь Emacs.


Если вы на Windows,WinMerge это довольно ловко. В Linux (и, возможно, OS X) есть объединить.

оба бесплатны и работают довольно хорошо. Не такой крутой, как Араксис, но мы не хотим, чтобы ты пускал слюни на свой стол.

оба являются универсальными инструментами diff с такими функциями, как игнорирование пробела. Я не совсем уверен, что они игнорируют пустые строки, но велики шансы, что они могут.


наши SD Smart Differencer сравнивает две исходные программы в соответствии с их точным грамматическим синтаксисом и структурой, а не в соответствии с необработанным текстом. Он делает это путем синтаксического анализа (SQL) source способ компилятора и сравнение соответствующих структур данных компилятора (например, абстрактных синтаксических деревьев). Следовательно, SmartDifference не заботится о новых строках, пробелах или промежуточных комментариях.

Он сообщает о различиях, а не с точки зрения разрывов строк, но скорее в терминах структур языка программирования (переменных, выражений, операторов, блоков, функций,...) и в терминах, близких к намерениям программиста (удалить, вставить, переместить, скопировать, переименовать), а не line-insert или line delete.

SQL (как и многие другие имена компьютерных языков) - это имя семейства компьютерных языков, которые похожи по синтаксису, но отличаются в деталях. Так что для умных Differencer, , который диалект SQL, вы используете вопросы. У нас есть SQL передние концы (поэтому SmartDifferncers) для PLSQL и SQL2011. Насколько вы в SQL находится в пределах любого из этих, умных Differencer может работать на вас; по мере вы использовать дополнительные вкусности сервера SQL или Postgres, в SmartDifferencer в настоящее время не могу вам помочь. [Мы разрабатываем Парсеры языка как часть нашего бизнеса, поэтому я ожидаю, что это вопрос задержки, а не никогда].

в то время как ОП спросил о SQL в деталях, его главный вопрос-язык агностический. Есть SmartDifferencers уже для многих других широко используемых языков, кроме SQL тоже: C, C++, C#, Java,...


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


команда Phpstorm's diff tool "игнорировать пробел: все" делает это идеально, как вы хотите. И он интегрировал поддержку для много VCS как SVN, git, etc. А также интегрированная поддержка SQL!

не бесплатно, но время тоже не бесплатно. Хотите потратить время на трудный путь? Идти вперед.

Я до сих пор не могу поверить, что это 2014, и это не была стандартная функция всех инструментов diff!!

кстати, я считаю, что инструмент diff WebStorm также будет работать.


вы можете использовать инструмент командной строки wdiff игнорировать переносы строк. wdiff является инструментом GNU для сравнения файлов на основе слово в слово. Он может игнорировать новые строки с помощью .

предположим, я помещу ваши 2 примера файлов в ex1.txt и ex2.формат txt. Тогда мы можем бежать:

$> wdiff -n ex1.txt ex2.txt
the
quick
brown

вывод на самом деле является содержимым первого файла. Обратите внимание, что нет знаков + или -, что означает, что файлы имеют одинаковые строки.

если бы я добавил "лиса" до конца ex1.txt, тогда выход будет выглядеть так:

the
quick
brown [-fox-]

если видим общие слова все еще беспокоит вас, вы можете добавить -3 или --no-common. Вот пример снова, где я добавил " fox " в первый файл:

$> wdiff -n -3 /tmp/ex1.txt /tmp/ex2.txt

======================================================================
 [-fox-]
======================================================================