вторник, 20 октября 2009 г.

Контроль версий в Visual Studio. Плагины VisualSVN и AnkhSVN



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

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

Систем контроля версий много, так же как и сред разработки. В этой статье речь пойдет об интеграции системы контроля версий Subversion со средой разработки Microsoft Visual Studio.

Subversion - лидер среди систем контроля версий. Она разрабатывается с 2000 года и призвана заменить CVS. К преимуществам Subverion относятся: поддержка атомарных транзакций, бесплатность, простота изменения структуры директорий, отсутствие ограничений на размеры репозитория, удобство работы с удаленными репозиториями, минимизация сетевого трафика и т. д.

Microsoft Visual Studio содержит встроенную возможность интеграции с системой контроля версий. Студия поддерживает интерфейс MSSCCI (Microsoft Source Code Control Interface), реализуя который, система контроля версий может встраиваться в IDE. MSSCCI является открытым интерфейсом и включен в Visual Studio SDK. VS2002 поддерживает MSSCCI 1.1, VS2003 - MSSCCI 1.2. В Visual Studio 2005/2008 реализована версия 1.3, поддерживающая возможности удаления и переименования файлов и асинхронные операции.

Существует масса программ, обеспечивающих интеграцию Visual Studio с Subversion через MSSCCI: PushOk SVN SCC (последователь небезызвестного PushOk CVS SCC), TamTam SVN SCC(неограниченный триальный период и цена менее 10 долларов), Unified SCC, Agent SVN и т. д. Преимущество у них одно - совместимые плагины MSSCCI могут работать не только с Visual Studio, но и с другими средами разработки, реализующими интерфейс MSSCCI. Например, Altova UModel 2009, PowerBuilder, Microsoft Access и т. д. Специальные MSSCCI-провайдеры позволяют интегрировать подобные плагины даже с Delphi и C++ Builder.

Типичный интерфейс MSSCCI-совместимого плагина
Типичный интерфейс MSSCCI-совместимого плагина (Unified SCC). Не слишком привычный для пользователей Subversion
К сожалению, для пользователей Subversion большинство подобных плагинов не удобны. Представьте себе: вы создаете новый проект и помещаете его под контроль версий вручную, с помощью того же TortoiseSVN. Открываете проект в студии и обнаруживаете, что совместимый плагин MSSCCI "не видит", что ваш проект уже находится под контролем версий. Проект нужно обязательно помещать под контроль версий исключительно средствами плагина. Это типичная ситуация. В контекстном меню не наблюдается привычных функций Subversion - Commit, Merge, Revert, Branch и т. п., зато есть какие-то Checkin, Get, Get last version. И наконец, функционал Subversion существенно превосходит возможности MSSCCI. Например, Subversion поддерживает атомарные транзакции, а MSSCCI - нет. Так что во многих случаях придется обходиться "обрезанным" функционалом Subversion.

Всех подобных недостатков лишена программа VisualSVN, представляющая собой полноценный плагин к Visual Studio, причем (не являющимся MSSCCI-совместимым) VisualSVN основан на популярном SVN-клиенте TortoiseSVN и интегрирует все возможности Subversion и TortoiseSVN в интерфейс студии в привычном и удобном для использования виде.

VisualSVN - не единственный подобный плагин. Есть еще бесплатная open source-разработка - AnkhSvn. Не так давно плагин был существенно переработан. Вышла его вторая версия, которая, хоть и является MSSCCI-совместимой, также лишена всех перечисленных недостатков.

Итак, рассмотрим возможности VisualSVN и AnkhSvn поподробнее.

VisualSVN 1.7.1.

Тем, кто привык к TortoiseSVN, интерфейс VisualSVN окажется знакомым. Это ведь тот же самый интерфейс.

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

Плагин VisualSVN добавляет в интерфейс студии несколько элементов: отдельный пункт в главном меню, панель инструментов, контекстное меню, окно Pending changes со списком всех внесенных в проект изменений.

Интерфейс VisualSVN
Интерфейс VisualSVN. Пункт в главном меню, панель инструментов, окно изменений, контекстное меню
VisualSVN предоставляет доступ ко всем функциям, доступным в TortoiseSVN. Взять проект из репозитория, добавить проект в репозиторий, выполнить обновление, слияние файлов, создать ветвь и т. д. - интеграция полная. Все необходимые функции всегда под рукой, в контекстном меню. Меню хорошо структурировано, пользоваться им удобно.

VisualSVN автоматизирует множество операций, избавляя разработчиков от рутинной работы. Репозитории создаются в стандартном виде с поддиректориями trunk, tags и branches. Файлы и директории, входящие в проект, добавляются в репозиторий автоматически. Директории obj и bin всегда игнорируются. Новые проекты, создаваемые в солюшене, добавляются в репозиторий автоматически. VisualSVN отслеживает внесение изменений в структуру проекта - переименование и перемещение файлов, операции Drag & Drop, Copy & Paste, Save as - и автоматически выполняет соответствующий набор команд Subversion.

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

Полный список измененных файлов можно просмотреть в отдельном окне Pending changes. В том случае, когда изменения в код вносятся с помощь средств автоматическогорефакторинга кода, возможность просмотреть список внесенных изменений может оказаться просто неоценимой.

На сайте разработчиков VisualSVN доступна еще одна крайне полезная программа - VisualSVN Server. Она позволяет организовать совместный доступ к репозиториям Subversion. В принципе это можно сделать средствами самой Subversion, установив и сконфигурировав Apache-сервер. Однако с VisualSVN Server процесс упрощается и убыстряется на порядок. Достаточно запустить программу установки - все необходимые компоненты будут установлены и настроены автоматически. На сайте разработчиков имеется деморолик, демонстрирующий процесс совместного использования VisualSVN Server и VisualSVN.

По сравнению со стандартными средствами Subversion, VisualSVN Server обеспечивает ряд дополнительных преимуществ. Он позволяет использовать аутентификацию через группы Active Directory, записывает информацию о подсоединениях в Windows Event Log, реализует графический интерфейс в виде стандартной консоли управления Windows и т. д. Программа полностью бесплатна. С ней можно работать не только через VisualSVN, но и через любой другой клиент Subversion.

AnkhSvn 2.0

AnkhSvn во многом схож по функциональности с VisualSVN. Однако есть пара важных отличий. Первое - AnkhSvn поддерживает MSSCCI 1.3, т. е. является пакетом SCC. Второе - AnkhSvn не использует TortoiseSVN. Весь графический интерфейс для работы с Subversion AnkhSvn реализует самостоятельно.

Интерфейс AnkhSvn
Интерфейс AnkhSvn. Панель инструментов, контекстное меню, окно со списком изменений
Несмотря на то что AnkhSvn является MSSCCI-совместимым, он без проблем работает с проектами, которые были помещены в репозиторий Subversion с помощью сторонних инструментов. AnkhSvn "подхватывает" такие проекты на лету, без необходимости выполнения каких-либо дополнительных манипуляций.

AnkhSvn добавляет в студию собственную панель инструментов, окно со списком измененных файлов, пункты контекстного меню, показывает статус файлов и директорий. AnkhSvn отслеживает изменения структуры проекта - переименование файлов, операции Save As и т. п. Новые проекты, добавляемые в солюшен, автоматически добавляются в репозиторий. Директории bin и obj исключаются автоматически.

Возможности AnkhSvn и VisualSVN, по большому счету, совпадают. AnkhSvn предоставляет доступ практически ко всей функциональности Subversion. Единственная функция, которую мне не удалось найти, - создание репозитория. Нет и поблочной отмены изменений. С другой стороны, в AnkhSvn есть дополнительный функционал. Например, окно Pending changes содержит средства разрешения конфликтов. В окно свойств файла добавлена категория Subversion, в которой показываются ревизия, путь к репозиторию, статус блокирования файла и т. п.

VisualSVN не дает возможности работать с файлами, не входящими в проект, - для этого предназначен TortoiseSVN. В AnkhSvn применяется другой подход. Никакого стороннего клиента Subversion не требуется. С файлами, не входящими в проект, можно работать средствами AnkhSvn, через окно Working Copy Explorer. Аналогично окно Repository Explorer в AnkhSvn позволяет работать с репозиторием.

Просмотр репозитория в AnkhSvn
Просмотр репозитория в AnkhSvn
Более подробно о возможностях плагина можно почитать в документации.

В AnkhSvn очень неплохой набор функциональности. К сожалению, плагин не слишком надежен в работе. Окно с сообщениями об ошибке появляется довольно часто, после чего плагин "отваливается" до следующей перезагрузки студии. В этом он существенно уступает программе VisualSVN, которая, наоборот, демонстрирует очень стабильную работу.

Версии

VisualSVN 1.7.1 - Visual Studio 2003/2005/2008, требуется TortoiseSVN.
AnkhSvn 2.0.6347 - Visual Studio 2005/2008.
AnkhSvn 1.0.4 - Visual Studio 2002/2003.

Выводы

Существует множество программ для интеграции функциональности Subversion в Microsoft Visual Studio. Плагины VisualSVN и AnkhSVN гораздо более удобны для работы с Subversion, чем большинство MSSCCI-совместимых плагинов. Оба плагина предоставляют полноценный доступ ко всей функциональности Subversion и автоматизируют множество рутинных операций.

Возможности плагинов по большей части совпадают. Однако между плагинами есть три ключевых отличия. Первое связано с интерфейсом. Интерфейс VisualSVN базируется на интерфейсе популярного SVN-клиента TortoiseSVN, а AnkhSvn реализует свой собственный графический интерфейс. Второе - со стоимостью. VisualSVN - это платная программа, а AnkhSvn - полностью бесплатен. Третье - с надежностью работы. VisualSVN работает очень стабильно, а AnkhSvn, к сожалению, пока не слишком надежен. Последнее очень досадно. Остается надеяться, что нестабильность AnkhSvn - проблема временная и разработчики с ней успешно справятся.


Ссылки по теме:

Автор статьи: Виктор Деревянко

Комментариев нет: