Инструмент Diff, который игнорирует новые строки
Мне часто приходится сравнивать SQL-процедуры, чтобы определить, что изменилось в самой новой версии. Проблема заключается в том, что у каждого свой стиль форматирования, а SQL (обычно) не заботится о том, где размещаются их новые строки (например, где клаузулы все в одной строке или новой строке перед каждым И).
Это очень сложно (особенно для длинных процедур), чтобы увидеть фактические различия. Я не могу найти бесплатную утилиту diff/merge, которая позволит мне игнорировать новые строки (например, рассматривать как пробельные символы). До сих пор я не пробовал WinMerge и Beyond Compare без всякой удачи. Кто-нибудь знает инструмент diff (идеально свободный), который бы видел эти два примера одинаковыми?
Ex. 1:
the quick
brown
Ex. 2:
the
quick
brown
Спасибо заранее.
Ответы
Ответ 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 text]()
![alt text]()
![alt 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-]
======================================================================