Инструмент различий, игнорирующий новые строки

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

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

Ex. 1:

the quick
brown

Ex. 2:

the
quick
brown

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


person Prometheus    schedule 20.11.2009    source источник
comment
На этот вопрос не было бесплатных утилит. Если будет добавлен ответ на бесплатную утилиту, я дам ему награду.   -  person Greg    schedule 04.11.2010
comment
Ответ, который я принял, предлагает бесплатную утилиту. ApexSQL Refactor входит в комплект их пробного программного обеспечения, но вы можете установить только этот элемент. Он очень хорошо интегрируется в SQL Server Management Studio и исправит весь запрос или только выбранный текст, нажав Ctrl-shift-R. Помимо упрощения сравнений, он имеет дополнительный бонус в виде стандартизации форматирования вашего запроса. Кроме того, он очень настраиваемый.   -  person Prometheus    schedule 10.11.2010
comment
Может мельд с какими настройками справится?   -  person Jonathan    schedule 09.03.2020


Ответы (12)


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

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

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

person Paul Sasik    schedule 20.11.2009
comment
Инструмент в вашей первой ссылке идеально подходит для работы. Потребовалось немного времени, чтобы просмотреть все пробные версии программного обеспечения и просто установить бесплатный плагин SQL Server Management Studio, но этот плагин позволяет мне переформатировать процедуры, чтобы иметь те же разрывы строк. Отличный ответ! Запуск результатов через WinMerge теперь дает полезные результаты. - person Prometheus; 21.11.2009
comment
В случае, если кто-то все еще ищет это, чтобы избежать ручных действий и переформатирования происходить автоматически или полуавтоматически, попробуйте мой плагин winmerge к библиотеке форматирования T-SQL для бедных людей с открытым исходным кодом: architectshack.com/PoorMansTSqlFormatter.ashx#Download_8 - person Tao; 23.02.2012

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

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

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

person Dustin Laine    schedule 05.11.2010
comment
View->Hide Unimportant Differences, кажется, позаботится об этом. Не уверен, что доверяю этому параметру, но я попробую настроить набор правил по своему вкусу. :) Мне очень нравится, что есть две вкладки для загружаемых / редактируемых файлов. - person Greg; 10.11.2010
comment
Чем больше я использую этот инструмент, тем больше он мне нравится. Я только что обнаружил, что его можно интегрировать в Windows Shell и сделать это намного удобнее. - person Dustin Laine; 10.11.2010
comment
Я пробовал это с двумя файлами размером около 2 МБ каждый, и это не сработало. Я также попробовал новый набор правил (игнорировать окончания строк). Два файла - это один и тот же XML, один - это исправленная версия, вот и все. Есть другой способ проверить? - person Vijay; 27.02.2013
comment
Этот ответ помог мне с моей задачей! Так что WinMerge в конце концов у меня сработал !! Кроме того, это онлайн-приложение из другого question также работал у меня, хотя и намного медленнее. - person Vijay; 27.02.2013

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

person winlts    schedule 05.07.2011

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

person Byron Whitlock    schedule 20.11.2009
comment
Я пробую (бесплатная 30-дневная пробная версия). Я слышал, что он позволяет игнорировать символы новой строки, так что, возможно, это того стоит. - person Prometheus; 21.11.2009
comment
Сравните - вроде тоже, да и дешевле вроде. grigsoft.com/wincmp3.htm - person Greg; 04.11.2010
comment
Попробовав его, сравните - он довольно хорошо работает с документами aspx, но не полностью. - person Greg; 04.11.2010
comment
Незаменимый инструмент сравнения. - person bvj; 27.01.2016
comment
Я не могу заставить Араксиса игнорировать символы новой строки, попробую сравнить - сейчас - person wutzebaer; 06.02.2020
comment
сравнить-это работает: параметры- ›сравнение-› игнорировать линейные искажения - person wutzebaer; 06.02.2020

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

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

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

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

alt textalt text alt text

person lothar    schedule 07.11.2010
comment
Как пользователь Visual Studio, чем больше я вижу Eclipse, тем больше завидую мне. - person Greg; 08.11.2010
comment
Шутки в сторону? Это заставляет меня каждый раз давиться. Думаю, я бы бросил этот бизнес, если бы весь день смотрел на Затмение. Пиксельная графика без сглаживания беспокоит меня больше, чем следовало бы. - person Prometheus; 10.11.2010
comment
Я не знаю об этой ошибке. Я сижу рядом с парнем, который использует Eclipse весь день, а я использую VS весь день. Мне нужно установить несколько плагинов, чтобы довести VS до того же уровня функциональности. - person Greg; 11.11.2010

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

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

http://poorsql.com

person Tao    schedule 23.02.2012

Наш 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, C ++, C #, Java, ...

person Ira Baxter    schedule 05.11.2010

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

person MarcH    schedule 10.11.2010

Вы можете использовать инструмент командной строки 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/ex1.txt /tmp/ex2.txt

======================================================================
 [-fox-]
======================================================================
person nofinator    schedule 07.10.2016
comment
указывая на obvioius, но обратите внимание, что здесь нет номеров строк. Делает это довольно бесполезным. - person Jeff; 09.10.2017
comment
Есть аналогичный инструмент под названием dwdiff, который может печатать номера строк. Команда, эквивалентная моему последнему примеру, плюс новые строки: dwdiff -L -3 ex1.txt ex2.txt. - person nofinator; 01.02.2018

Если вы используете Windows, WinMerge довольно удобен. Под Linux (и, возможно, OS X) есть Meld.

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

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

person Carl Smotricz    schedule 20.11.2009
comment
WinMerge может игнорировать пустые строки, но WinMerge не будет обрабатывать новые строки (то есть в разных местах) как пробелы. - person Prometheus; 21.11.2009
comment
@Prometheus, я что-то упустил? Или почему эта деталь важна? - person Pacerier; 24.04.2015

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

person Chris Pfohl    schedule 09.11.2010
comment
Проблема в том, что большинство приложений (включая KDiff в моем опыте) не могут надежно обрабатывать символы новой строки как пробелы. - person Prometheus; 10.11.2010
comment
Таким образом препроцессор позволяет разумно заменять символы новой строки чем-то другим. - person Chris Pfohl; 10.11.2010

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

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

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

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

person CommaToast    schedule 03.03.2014