вторник, 21 августа 2007 г.

Сравнение и слияние документов

Бывают такие документы, которые написал - и забыл. А бывают такие, что живут годами, постепенно меняясь и совершенствуясь, меня владельцев и авторов, с каждой редакцией становясь все более далекими от первоначального варианта. Особенно это характерно для документов, сопровождающих ведение какого-нибудь проекта: программного или не очень. Это может быть руководство пользователя, диссертация, статья или даже исходный код программы.
Иногда после внесения в документ ряда изменений нам хочется - из любопытства или по долгу службы - сравнить исходный вариант с текущим, посмотреть что и где изменилось.
В настоящее время, несмотря на переменный успех в борьбе открытых форматов с закрытыми, в офисной среде доминирует формат DOC и, с выходом Office 2007, DOCX, разработанные компанией Microsoft. Именно в этих форматах составляется львиная доля всей документации.
Microsoft Word 2007 CompareВ Word 2007 появилась, наконец, функция сравнения двух версий документа с наглядным отображением разницы между ними. Можно сравнивать любые документы, поддерживаемые Word, то есть как файлы в новом формате DOCX, так и старые DOC-файлы. Функция вызывается нажатием на кнопку "Сравнить" на вкладке "Рецензирование". В появившемся окне нужно указать исходный и измененный документ, после чего будут показаны результаты сравнения. Мне способ представления, предлагаемый Microsoft, показался не очень удобным, но он, безусловно, свою функцию выполняет. Кроме того, можно произвести слияние (объединение) двух файлов, что может пригодиться, когда несколько человек отдельно друг от друга редактируют разные части документа. Не стоит пытаться автоматически объединять два файла, отредактированные в одном и том же месте, но по-разному - результат будет непредсказуемым.
WinDiffПри ведении программных проектов самый большой документ - исходный код - обычно представляет собой старый добрый текстовый файл. А поскольку всякая уважающая себя команда программистов пользуется системой контроля версий, то естественным образом возникает несколько версий одного и того же исходного файла, из которых используется только последняя. При возникновении каких-то трудноуловимых ошибок или простро при запланированном обзоре кода возникает необходимость сравнить последнюю версию кода с предыдущей. Пионером в этом деле была юниксовая консольная утилита diff (на основе которой до сих пор базируется немало графических приложений), позже появился графический аналог для Windows - WinDiff, написанный, судя по всему, самой Microsoft.
WinMergeWinDiff мне показалась страшно неудобной, и вместо нее я использую WinMerge, которая не только сравнивать умеет, но и вполне пристойно объединять файлы. Кроме того, она корректно работает с файлами, написанными в различных кодировках и распознает разные типы концов строк (Windows/UNIX). Еще умеет интегрироваться с SourceSafe и ClearCase, но непонятно зачем - обычно WinMerge вызывается из системы управления версиями. Например, связка WinCVS+WinMerge работает превосходно.

13 коммент.:

ynetbot комментирует...

Еще умеет интегрироваться с SourceSafe и ClearCase, но непонятно зачем - обычно WinMerge вызывается из системы управления версиями.

А разве SourceSafe и ClearCase - это не системы управления версиями от Microsoft и IBM соответственно?

Flegmatic комментирует...

Я имел в виду, что система управления версиями обычно сама вызывает diff-подобную программу, передавая ей имена файлов как аргументы. Так что от программы не требуется поддерживать все возможные системы управления версиями.

ynetbot комментирует...

Вот здесь написано, зачем нужна эта интеграция. После прочтения становится ясным, зачем нужна эта "интеграция", но становится непонятным, зачем использовать WinMerge с SourceSafe и ClearCase

Flegmatic комментирует...

Ну да, интеграция - чтобы файлы вытаскивать через WinMerge, а не через SourceSafe. Может быть, кому-то так удобнее. А почему становится непонятным, зачем использовать WinMerge с SourceSafe и ClearCase?

Анонимный комментирует...

а мне больше по душе "compare it!"
+ ща уже разрабатывается поддрежка сравнения бинарных файлов в hex

Да и так очень удобный интерфейс)
кроме сравнения можно еще и перекидывать изменения

Flegmatic комментирует...

CompareIt! платная, к сожалению. Если есть бесплатные аналоги, зачем становиться пиратом или платить денежку?

ynetbot комментирует...

А почему становится непонятным, зачем использовать WinMerge с SourceSafe и ClearCase?

Потому что он не подменяет штатный инструмент слияния изменений в этих системах. Всё, что он может, так это сделать CheckOut для файла. В ситуации, когда у меня две параллельно поддерживаемые ветки кода, например, для разных выпусков продукта, и я хочу в одну ветку импортировать фикс из другой, это может помочь. А вот просто посмотреть версионные изменения в пределах одной ветки я уже не могу. Точнее могу, но через одно место - мне нужно будет вытащить соответствующие ревизии в разные папки средствами SourceSafe/ClearCase, а уже потом накатить на папки WinMerge. Штатным средством я смогу сделать то же самое в два щелчка мышью.

Вот и получается, что WinMerge лучше использовать с WinCVS или с Subversion, а с проприетарными системами как-то не того.

Flegmatic комментирует...

Наконец-то я понял мысль. Да, согласен.

Анонимный комментирует...

eskil.exe
надеюсь гугл тебе поможет
(использует внешний консольный diff)
а, на ворлде я давал ссылки в «полезном»
кстати опиши Пикасу для комплектации ;)

Flegmatic комментирует...

Серроус, ты ник сменил? :)
Eskil через гугль не находится, но через иу7ворлд нашел. В чем-то она даже получше, чем WinMerge, на досуге погоняю ее потщательнее и опишу.

Анонимный комментирует...

Сранение документов есть и в PSPad'е - хорошем бесплатном текстовом редакторе, заточенном под программирование. Не скажу что лучшее, т.к. не сравнивал, но вполне сносное.

wow комментирует...

Я да же не знал, что можно сравнивать документы в word, спс за хорошую статью!

Анонимный комментирует...

Здравствуйте, попробуйте Araxis Merge. Не видел ещё ни одного програмера, который после него захотел бы пересесть на что то другое. Единственный недостаток, он платный.