Subversion в Delphi XE. Впечатления после одного дня работы.

Вчера задумал попробовать использовать новую возможность RAD Studio XE - поработать с Subversion. Пересмотрел ещё раз официальный ролик где рассказывается об этой фиче, создал репозиторий на Google Code, простенький Delphi-проект и начал свое маленькое исследование. В принципе, я не ожидал увидеть прямо так сразу в Delphi XE все возможности работы с CVS как, например, в том же Eclipse, но, что получилось то получилось…

Итак, начнем пожалуй с официального видео от Embarcadero:

Обратите внимание на момент, когда создается новые проект и ставится под контроль CVS, создается проект, содержащий пустую форму, далее в Project Manager вызывается контекстное меню и выбирается пункт "Add to Version Control" после чего проект сохраняется в папку с интересным названием и судя по видео должно появится новое окно в котором показаны файлы, встающие под контроль и кнопка "Import". Далее выбираем репозиторий и ставим проект под контроль.

Вносим изменения в проект, добавляем новые функции и т.д. Сразу в глаза бросается недоделанность в плане работы с SVN Project Manager"a. Почему нет никаких опознавательных знаков для файлов, которые были изменены, не находятся под контролем, игнорируются и т.д.? Это мелочь, но, по-моему очень значительная. Можно пережить, когда проект мелкий, состоит всего их нескольких модулей - и так запомнишь что и где менял и почему. А если крупный? Каждый раз открывать вкладку history и смотреть изменения или копаться в логах Subversion? Не удобно до жути.

Следующий момент - добавление новых файлов под контроль. Здесь вроде бы все в порядке. Рассмотрим, например, такую ситуацию: только начинаете работать над проектом, уже нарисовалась какая-никакая структура репозитория, основные файлы проекта уже находятся там и Вам заходелось добавить, скажем, папку addons в которой Вы планируете хранить модули каких-нибудь сторонних библиотек, используемых в проекте. Создаем новую директорию, закидываем туда необходимые файлы и в контекстном меню Project Manager"а выбираем "Subversion -> Commit". В окне коммита устанавливаем флажок "Show unversioned files" и видим все файлы рабочей копии, которые не находятся под контролем:

Далее добавляем ставим файлы под контроль, комментируем, коммиттим и т.д. в общем стандартный набор операций. Тут, как я уже сказал, все в порядке и работает нормально за одним небольшим исключением - когда в репозиторий отправляется много файлов IDE виснет наглухо. Видно, что в Messages вроде бы бегунок дёргается, т.е. что-то туда пишется, но IDE замирает и ничего делать кроме как ждать и ещё раз ждать не получается. Будем надеяться, что при первом Update RAD Studio эту часть доработают.

Следующий момент - работа с Diff Viewer""ами. Так как я уже изрядно избалован пожизненной лицензией Code Merger"а, то, естественно, работа встроенного вьювера  "Beyond Compare" меня никак не устроила. Просматривать добавленные лишние пробелы и удаленные излишние коментарии как-то не порадовало. Тем более, что на мой взгляд, Code Merger самым наилучшим образом подходит под работу с pas и dfm-файлами. Благо в опциях Delphi XE предусмотрена настройка внешних вьюверов. Пробуем настроить.

Заходим в "Tools-->Options-> Difference Viewer" и добавляем новый внешний вьювер:

Для настройки Code Merger в качестве внешнего вьювера ему необходимо в параметрах передать строку вида:

pas file1 file2 r rw

где pas - тип файлов для сравнения, file1 и file2 - имена файлов для сравнения, включая полный путь до них, r rw - доступ к файлам (r - чтение, rw - чтение и запись).

Окно добавление внешнего вьювера выглядит следующим образом:

Title - название вьювера, которое будет отображаться в списке.

Programm - полный путь до exe-файла вьювера

Working directory - рабочая директория. Заполняется автоматом на основе данных из поля Programm

Parameters - параметры командной строки.

В параметры допускается вставлять один или несколько макросов, доступных в списке Macros. Немного поэкспериментировав с макросами получилось обеспечить более-менее сносную работу Code Merger,используя строку параметров как показано на рисунке:

После настройки необходимо перезапустить IDE и тогда Code Merger (тьфу-тьфу-тьфу) вроде бы нормально принимает все параметры и показывает различия между ревизиями и т.д.

Теперь пробуем просмотреть с помощью внешнего вьювера различия. Выбираем в Project Manager файл, вызываем контекстное меню и указываем "Compare -> History Compare". Нам предлагаю выбрать что будем сравнивать сравнивать:

Выбираем, жмем "Show Diff" и… грузится Beyond Compare. При этом в настройках я указал:

Пробовал и наоборот - результат тот же. А что бы увидеть свой собственноручно настроенный вьювер в работе необходимо открыть файл, перейти на закладку History -> Difference, выбрать объекты для сравнения и нажать кнопку "Show in Difference Viewer":

Вот тогда заработает Ваш вьювер. Во всех остальных случаях: через контекстное меню мэнеджера проектов, через главное меню "Edit -> Compare" - запускается Beyond Compare. Может кто-то смог от него избавиться и нормально настроить свой вьювер для запуска из мэнеджера проектов?

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

Двигаемся дальше. Проверим работу с репозиториями других разработчиков. В качестве эксперимента попробовал импортировать проект VirtualTreeView из Google Code.

Выбираем в главном меню IDE "File -> Open From Version Control". Нас проят указать адрес репозитория и путь до директории с рабочей копией. Указываем:

Жмем "Ok" и все работаем замечательно - рабочая копия создается без проблем:

Итак, какие выводы я сделал для себя касательно работы с Subversion в RAD Studio XE:

1. Буду ли я активно использовать все возможности, предоставленные мне разработчиками? Нет. Если очень сильно потребуется вплотную работать с SVN - воспользуюсь TortoiseSVN + Code Merger. На крайний случай можно сделать мелкий Commit или Update.

2. Расстроен ли я нынешней работой с SVN в Delphi XE? Нисколько. Во-первых, я не ожидал чего-то похожего на TortoiseSVN или Eclipse сразу же в первом релизе. Опять же маркетинг и всё такое - теперь активно использующие SVN разработчики будут ждать новых версий - там же всё поисправляют :). Во-вторых, мне, как обладателю безумно непредсказуемого подключения к Интернет, больше нравится работа с Git. Пусть по сравнению  с SVN первое время работа с Git кажется чем-то непостижимо сложным и непонятным - со временем привыкаешь. Я привык.


Страница сайта http://test.interface.ru
Оригинал находится по адресу http://test.interface.ru/home.asp?artId=25482