Подтвердить что ты не робот

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

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

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

Ex. 1:

the quick
brown

Ex. 2:

the
quick
brown

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

4b9b3361

Ответ 1

То, что я сделал в моем собственном подобном случае, - использовать sql prettifier, который будет организовывать два набора полуразрушающего SQL в очень подобный способ автоматически. Затем вставьте и сравните результаты с WinMerge.

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

Ссылка на веб-принтер Sql Pretty, который подходит.

Ответ 2

Мне действительно нравится SourceGear DiffMerge!

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

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

Ответ 3

Compare ++ - это вариант, вы можете попробовать "Игнорировать изменения стиля кода" в меню "умное". Он поддерживает структурированное сравнение для многих langugages, таких как C/С++, JavaScript, С#, Java,...

Ответ 4

Вы можете использовать DTP (Data Tool Project) для Eclipse IDE.

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

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

Вот результат.

alt textalt textalt text

Ответ 5

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

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

http://poorsql.com

Ответ 6

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

Ответ 7

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

Ответ 8

Если вы находитесь в Windows, WinMerge довольно гладкий. В Linux (и, возможно, OS X), Meld.

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

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

Ответ 9

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

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

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

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

Ответ 10

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

Ответ 11

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

Не свободен, но время тоже не бесплатное. Хотите тратить время на то, чтобы сделать это с трудом? Преуспевать.

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

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

Ответ 12

Вы можете использовать инструмент командной строки wdiff, чтобы игнорировать новые строки. wdiff - это инструмент GNU для сравнения файлов по принципу "один за другим". Он может игнорировать новые строки с опцией -n.

Предположим, что я помещаю ваши 2 примера файлов в ex1.txt и ex2.txt. Затем мы можем запустить:

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

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

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

the
quick
brown [-fox-]

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

$> wdiff -n -3 /tmp/1.txt /tmp/2.txt

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