Просмотр различий

Одно из самых общих требований при разработке проекта - видеть, что было изменено. Вам может понадобиться посмотреть различия между двумя ревизиями одного и того же файла, или различия между двумя различными файлами. Для просмотра различий в текстовых файлах TortoiseSVN предоставляет встроенный инструмент, называемый TortoiseMerge. В TortoiseSVN также есть утилита для просмотра различий в графических файлах под названием TortoiseIDiff. Конечно, при желании вы можете использовать вашу любимую программу для просмотра различий.

Различия в файлах

Локальные изменения

Если вам надо посмотреть, какие изменения вы сделали в вашей рабочей копии, просто вызовите контекстное меню Проводника и выберите TortoiseSVNРазличия.

Различия с другим ответвлением/меткой

Если вы желаете посмотреть, что изменилось в основном стволе (если вы работаете в ответвлении) или в каком-то ответвлении (если вы работаете в основном стволе), вы можете воспользоваться контекстным меню Проводника. Просто удерживайте нажатой клавишу Shift при щелчке на файле правой кнопкой мыши. Далее выберите TortoiseSVNРазличия с файлом по URL и в последующем диалоге укажите URL в хранилище, с которым вы желаете сравнить ваш локальный файл.

Вы также можете выбрать в обозревателе хранилища два дерева для сравнения, возможно, две метки, или ответвление/метку и ствол. Их можно сравнить, используя Сравнить ревизии из контекстного меню. Больше прочитать об этом можно в «Сравнение папок».

Различия с предыдущей ревизией

Если вы желаете посмотреть различия между определённой ревизией и вашей рабочей копией, выберите нужную ревизию в диалоге журнала ревизий, затем выберите Сравнить с рабочей копией из контекстного меню.

Если вы желаете посмотреть различия между последней зафиксированной ревизией и вашей рабочей копией, при условии, что рабочая копия не была изменена, просто выполните правый щелчок на файле и выберите TortoiseSVNСравнить с предыдущей версией. Это запустит процесс получения различий между ревизией перед последней-датой-фиксации (зарегистрированной в вашей рабочей копии) и рабочей базой. Будут показаны последние произведённые в этом файле изменения, при помощи которых файл был приведён в своё текущее состояние, наблюдаемое в вашей рабочей копии. Изменения, более поздние, чем ваша рабочая копия, не показываются.

Различия между двумя предыдущими ревизиями

Если вы желаете посмотреть различия между двумя ранее зафиксированными ревизиями, выделите в диалоге журнала ревизий (применяя для этого, как обычно, клавишу Ctrl) две ревизии, которые вы хотите сравнить. Затем выберите Сравнить ревизии из контекстного меню.

Если это сделать из журнала ревизий для папки, то появится диалог сравнения ревизий, отображающий список изменённых файлов из этой папки. Больше можно прочитать в «Сравнение папок».

Все изменения, сделанные в фиксации

Если вы желаете посмотреть все изменения, произведённые во всех файлах в определённой ревизии, собранные в одном месте, вы можете применить выдачу в виде объединённых различий (Unified-Diff, формат заплаток GNU). Будут показаны только различия с несколькими строками контекста. Этот формат сложнее для чтения, чем визуальное сравнение файлов, но он показывает сразу все изменения. В диалоге журнала ревизий выберите интересующую вас ревизию, затем выберите Показать различия как объединённые различия из контекстного меню.

Различия между файлами

Если вы желаете посмотреть различия между двумя разными файлами, вы можете сделать это прямо в Проводнике, выделив оба файла (как обычно, с использованием клавиши Ctrl) и выбрав TortoiseSVNРазличия из контекстного меню Проводника.

Если сравниваемые файлы размещены не в одной папке, то используйте команду TortoiseSVNСравнить позже, чтобы отметить первый файл для сравнения, затем найдите второй файл и используйте TortoiseSVNСравнить с "путь/к/отмеченному/файлу". Чтобы удалить отмеченный файл используйте команду TortoiseSVNСравнить позже ещё раз, но удерживайте клавишу Ctrl при нажатии.

Различия между файлом/папкой в рабочей копии и файлом/папкой по URL

Если вы желаете посмотреть различия между файлом из вашей рабочей копии и файлом в каком-нибудь хранилище Subversion, то это можно сделать прямо в Проводнике, выделив этот файл и вызвав контекстное меню, удерживая клавишу Shift, после чего выбрав TortoiseSVNРазличия с файлом по URL. Это же можно сделать и для папки в рабочей копии. TortoiseMerge показывает эти различия также, как показывает файл заплаток - в виде списка изменённых файлов, которые можно просматривать по одному за раз.

Различия с информацией об авторстве

Если вы желаете посмотреть не только различия, но и автора, ревизию и дату сделанных изменений, вы можете объединить выдачу по различиям и авторству из диалога журнала ревизий. Прочтите «Авторство различий» для дополнительной информации.

Различия между папками

Встроенные утилиты, поставляемые с TortoiseSVN, не поддерживают показ различий между иерархиями папок. Но если у вас есть другой инструмент, обладающий такой возможностью, вы можете использовать его. В «Внешние инструменты просмотра различий/слияния» мы расскажем о некоторых инструментах, которые нам довелось попробовать.

Если у вас в настройках указан сторонний инструмент сравнения, вы можете использовать клавишу Shift при выборе команды 'Различия' для его применения. Прочтите «Настройки внешних программ», чтобы узнать, как настраивать другие инструменты сравнения.

Параметры сравнения завершений строк и непечатаемых знаков

За время жизни проекта случается, что вы изменяете завершения строк с CRLF на LF, или изменяете отступ какой-нибудь части. К сожалению, это приводит к тому, что большое количество строк помечаются как изменённые, даже если не было изменений смысла кода. Следующие параметры помогут справиться с такими изменениями, когда дело доходит до сравнения и применения различий. Эти настройки присутствуют в диалогах Слияния и Авторства, а также в настройках TortoiseMerge.

Игнорировать завершения строк исключает изменения, возникающие только из-за разницы типов завершений строк.

Сравнивать непечатаемые знаки включает все изменения отступов и пробельных символов внутри строк в виде добавленных/удалённых строк.

Игнорировать изменения пробельных символов исключает изменения, которые состоят только в изменении количества или типа пробельных символов, т. е. изменение отступов или замена табуляций на пробелы. Добавление пробела там где его раньше не было или удаление пробела всё же отображается как изменение.

Игнорировать все непечатаемые знаки исключает все изменения только пробельных символов.

Конечно, все строки с изменившимся содержимым всегда включаются в различия.

Сравнение папок

Рисунок 4.27. Диалог сравнения ревизий

Диалог сравнения ревизий


Когда вы выбираете два дерева в обозревателе хранилища, или когда вы выбираете две ревизии папки в диалоге журнала, у вас есть возможность Контекстное менюСравнить ревизии.

Этот диалог показывает список всех изменённых файлов и позволяет производить сравнение или просматривать авторство отдельно для каждого файла, используя контекстное меню.

Вы можете экспортировать дерево изменений, полезное, если вам нужно отправить кому-нибудь структуру вашего проекта в виде дерева, содержащего только изменённые файлы. Эта операция работает только для выбранных файлов, поэтому вам надо выбрать интересующие файлы - часто это означает их все - и после этого Контекстное менюЭкспортировать выбранное в.... У вас будет запрошено место, куда будет сохранено дерево изменений.

Вы также можете экспортировать список изменённых файлов при помощи Контекстное менюСохранить список выбранных файлов....

Если вы желаете экспортировать список файлов вместе с выполненными действиями (изменено, добавлено, удалено), то это можно сделать при помощи пункта Контекстное менюКопировать выбранное в буфер обмена.

Кнопка сверху позволяет изменить направление сравнения. Можно посмотреть изменения, необходимые, чтобы из А получить Б, или, если вам больше нравится, такие, чтобы из Б получить А.

Кнопки с номерами ревизий могут быть использованы для переключения на другой диапазон ревизий. При изменении диапазона список элементов, различающихся между ревизиями, будет обновлён автоматически.

Если список имён файлов очень длинный, можно применить поле поиска для уменьшения размеров списка: сделать так, чтобы в нём присутствовали только файлы, содержащие определённый текст в своём имени. Обратите внимание: используется простой поиск текста, поэтому если вам нужны в списке только файлы исходного кода на C, надо ввести .c, а не *.c.

Сравнение картинок при помощи TortoiseIDiff

Есть множество утилит для сравнения текстовых файлов, включая нашу собственную TortoiseMerge, но часто оказывалось, что нам также хотелось увидеть, что же изменилось в графических файлах. Именно поэтому мы создали TortoiseIDiff.

Рисунок 4.28. Программа просмотра различий в картинках

Программа просмотра различий в картинках


TortoiseSVNРазличия для файлов любого из широко распространённых графических форматов запускает TortoiseIDiff для показа различий в картинках. По умолчанию, картинки показываются бок о бок, но вы можете воспользоваться меню 'Вид' или инструментальной панелью для отображения картинок одна над другой, или, по желанию, вы можете наложить картинки одна на другую как при использовании проектора.

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

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

Когда картинки наложены одна на другую, относительная интенсивность картинок (альфа-сопряжение) регулируется при помощи бегунка слева. Для задания нужной степени прозрачности можно щёлкнуть прямо в нужном месте бегунка, или же изменить значение при помощи

Кнопка над бегунком переключает между 0% и 100% прозрачностью, и при двойном щелчке на кнопке прозрачность будет переключаться автоматически каждую секунду, пока вы не щёлкните по кнопке ещё раз. Это может пригодиться при поиске нескольких мелких изменений.

Иногда бывает необходимо увидеть только то, чем изображения различаются, и не всегда наложение их друг на друга может помочь. Возможно, у вас есть изображения двух ревизий печатных плат и вы желаете посмотреть, какие дорожки изменились. При отключении режима альфа-сопряжения различия будут показаны при помощи операции XOR над значениями цветов пикселов. Неизменённые области будут чисто белыми, а изменения будут окрашены.

Сравнение докуменов формата Office

Когда вы хотите сравнить нетекстовые документы обычно вам понадобится ПО, с помощью которого вы создали документ, т. к. оно понимает формат этого файла. В общеиспользуемых пакетах Microsoft Office и Open Office есть некоторая возможность просмотра различий, и TortoiseSVN содержит скрипты для запуска с правильными настройками когда вы сравниваете файлы с известными расширениями. Вы можете проверить какие расширения файлов поддерживаются, и добавить свои, открыв TortoiseSVNНастройки и щелкнув Дополнительно в разделе Внешние программы.

Проблемы с Office 2010

Если вы установили версию Click-to-Run пакета Office 2010 и пытаетесь сравнить документы, то можете получить сообщение об ошибке из Windows Script Host наподобие этой: «ActiveX component can't create object: word.Application». Это говорит о том, что вы должны использовать MSI версию пакета Office чтобы заработала функция сравнения.

Внешние инструменты просмотра различий/слияния

Если предоставленные нами инструменты не делают того, что вам надо, попробуйте какую-нибудь из множества доступных альтернатив: программ с открытым исходным кодом или коммерческих программ. У каждого свои предпочтения, и этот список никоим образом не полон, но вот несколько программ, которые вы можете принять во внимание:

WinMerge

WinMerge - прекрасный инструмент просмотра различий, который также может работать с папками. Программа с открытым исходным кодом.

Perforce Merge

Perforce - это коммерческая RCS, но вы можете загрузить бесплатный инструмент для просмотра различий/слияния. Дополнительную информацию можно получить на сайте Perforce.

KDiff3

KDiff3 - это бесплатный инструмент для просмотра различий, который также может работать с папками. Вы можете загрузить его отсюда.

SourceGear DiffMerge

SourceGear Vault — это коммерческая RCS, но инструмент сравнения/слияния вы можете скачать бесплатно. Более подробная информация на сайте SourceGear.

ExamDiff

ExamDiff Standard распространяется как freeware. Он может обрабатывать файлы, но не папки. ExamDiff Pro распространяется как shareware и добавляет несколько расширений, включая сравнение директорий и возможность редактирования. Обе разновидности, начиная с версии 3.2, могут работать с юникодом. Вы можете загрузить их с сайта PrestoSoft.

Beyond Compare

Подобно ExamDiff Pro, это прекрасный инструмент просмотра различий, умеющий работать с папками и с юникодом, и распространяемый по лицензии shareware. Загрузить его можно с сайта Scooter Software.

Araxis Merge

Araxis Merge - это полезный коммерческий инструмент для показа различий/слияния как файлов, так и папок. Он выполняет трёхстороннее сравнение при слиянии и в нём есть ссылки синхронизации, применяемые, если вы изменили порядок функций. Его можно загрузить с сайта Araxis.

В «Настройки внешних программ» описано, как настроить TortoiseSVN для использования этих инструментов.