Почитав документацию по SVN в Delphi, попробовал поработать с системой контроля версий из Delphi. В документации приводится вот такая сравнительная таблица функционала TortoiseSVN и Delphi варианта этого функционала. Попробуем создать простой VCL проект и пройтись по этой таблице.
Создание исходного проекта
Итак, заведем специальную папку для экспериментов, например DelphiSVN, в неё поместим папку SourceFolder, в которой и сохраним наш первоначальный проект.
Импорт в репозиторий на сервере VisualSVN
На первом шаге нам понадобится импортировать проект в репозиторий SVN. В доках, в таблице, сказано, для импорта нужно сделать следующее
Project Manager | right-click a project | Add to Version Control.
Система предлагает выбрать из Git, Mercury и Subversion
Выбираем Subversion.
Далее перед нами предстает вот такое окно, в котором нам нужно заполнить URL репозитория, и комментарии.
Заполняем эти данные. Я создал на своем VPS тестовый репозиторий с помощью сервера VisualSVN и заполнил эти поля – кнопка import стала активной лишь после того как я 2 раза нажал на “многоточие” и явно показал Delphi по какому адресу у меня находится репозиторий.
Обратите внимание!
Мы импортировали 4 файла, а в папке их было 5. Если бы мы делали импорт из “черепахи”, то есть из TortoiseSVN, то на сервер отправилось бы все 5 файлов. И в дальнейшем с этими файлами-призраками нужно было бы разбираться в ручную. А так Delphi отправил только те файлы, которые непосредственно относятся к проекту. Дальше мы увидим, что эти файлы-призраки увеличиваются, с 1 до 3 в моем эксперименте.
Это к чему? При работе – имхо лучше выбрать с чем преимущественно будем работать, либо из Delphi, либо из Черепахи, со всеми вытекающими последствиями. Если из Delphi, то она сама знает какие файлы импортировать, чтобы потом не мучиться с синхронизацией, а если из Черепахи, то тогда нужно разбираться, что это за файлы и как они обновляются. Потому что в моем случае, я наблюдал, что они обновлялись во время запуска программы, или закрытия проекта и так далее.
В любом случае и тот и другой подход будут работать.
Repo-Browser или проверка – всё ли загрузилось нормально?
В таблице документации указано следующее.
Do either of the following:
- Project Manager | right-click a file | Browse Repository.
- Project Manager | right-click a project| Browse Repository | choose either:
- Subversion > Browse Repository > From Repository Root
- Subversion > Browse Repository > From Project Directory
See Repository Browser.
Что же – нам нужен не корень Репозитория, а директория проекта в репозитории, тогда выбираем второй вариант.
Получаем следующую картину
Все 4 файла, которые отправляли на сервер – находятся там. Хотя на локальном диске 6 файлов на данный момент – видимо какие-то дополнительные файлы. Видимо менеджер импорта что-то учел и загрузил только 4 файла. Ну в общем, посмотрим, что дальше будет.
Выделение рабочей копии из репозитория
В документации по этому поводу написано
File > Open from Version Control
How To: Checkout a Copy of a Repository.
Итак, закроем текущий проект и откроем новый, который будет под контролем версий.
Delphi опять нас спрашивает о системе контроля версий – выбираем SubVersion
Далее самое интересное – нам нужно выбрать путь из которого Delphi загрузит файлы проекта для контроля версий и путь, в котором у нас будет находиться рабочая копия. Сделаем это следующим образом.
В начале поста мы создали специальную папку для экспериментов DelphiSVN, в ней же создадим WorkFolder, в которую загрузим файлы с сервера.
Delphi благополучно загрузит файлы и спросит какой проект открыть.
Интересный момент
Тут интересный момент получился. И при импорте на сервер из SourceFolder и при загрузке в WorkFolder Delphi поставила их на контроль – это можно увидеть, если просто зайти в папку DelphiSVN – обе подпапки подсвечены зеленым значком – означающим, что синхронизация с сервером SVN выполнена.
Сохранение изменений на сервер (Commit)
Сделаем какие-нибудь изменения, например добавим ListBox и одну строку Line1
В документации написано следующее
Project Manager | right-click a file | Subversion > Commit.
How To: Commit Changes to Version Control.
Что же, проделаем это…
Подпишем комментарий и сделаем Commit
Delphi вернула нас к проекту.
Просмотр лога
В документации написано
Do either of the following:
- Project Manager | right-click a project | Subversion > Show Log.
- History tab | click the Information tab.
How To:
Выберем первый вариант.
В принципе, у нас полноценный такой лог, в котором мы видим и комментарии и ревизии и какие файлы были модифицированы.
Просмотр различий между ревизиями
В документации написано
History tab | click the Differences tab.
How To: Diff (Compare) Versions of a File.
Проделаем это. В левой части выберем предыдущую ревизию, то есть вторую. Во второй половине выберем следующую ревизию, то есть третью. Если подвести мышью к строке ревизии – во всплывающей подсказке написаны наши комментарии. Например FirstImport или Added Memo and Line1.
Также цветом подсвечено – что добавилось, а что убавилось. Слева плюсы и минусы, я так понимаю, в плюсе то, что добавилось, в минусе – то, что было.
Посмотрим на второй файл из выпадающего списка выше, Unit.dfm – здесь также, Delphi дружелюбно нам подсвечивает, что изменилось.
Просмотр аннотаций
Просмотр аннотаций в Delphi – это по сути соответствие ревизия – строка. В документации написано, что таким образом можно узнать “возраст” строки. Пока не представляю где это может быть нужно, но тем не менее.
В документации это выглядит следующим образом
History tab | click (Annotate).
How To: Use the Annotation Feature.
Нужно выбрать Юнит
Потом выбрать ревизию
И нажать на аннотацию
После просмотра получаем следующее
Движемся дальше
Update
Если на сервере кто-то что-то поменял, и нам нужна позарез свежая копия, то делаем Update.
Project Manager | right-click a file | Subversion > Update.
How To: Update a Local Copy of a File under Version Control.
Update файла…
Update проекта в целом
Clean UP
Эта операция восстановления поврежденных или конфликтных файлов при неудачном Commit или Update. То есть по сути это UPdate файлов с сервера, но видимо с какими-то специфическими моментами. Сам в точности не знаю как это работает.
В документации написано следующее
Project Manager | right-click a file | Subversion > Update.
How To: Update a Local Copy of a File under Version Control.
Проделаем это
В логе эта операция никак не отражается.
Откат изменений
В той таблице, по которой мы следовали откат изменений прямо не описан, но тут ничего сложного. Зайдем в лог и сделаем Revert на той ревизии к которой хотим вернуться.
Delphi переспросит нас – в здравом ли мы уме?
Далее возможно выпадет вот такая ошибка
Просит обновиться сначала, что же – сделаем это и повторим Revert
Согласимся на перезагрузку и увидим следующее
После отката – если нам действительно нужно это состояние – нужно сделать Commit – закрепить это состояние на сервере.
Ну и последее – смотрим лог
В общем, мы проделали все основные операции по работе с клиентом. По поводу командой работы и модели слияния – напишу в отдельном посте.