Delphi и SVN.

Почитав документацию по SVN в Delphi, попробовал поработать с системой контроля версий из Delphi. В документации приводится вот такая сравнительная таблица функционала TortoiseSVN и Delphi варианта этого функционала. Попробуем создать простой VCL проект и пройтись по этой таблице.

Создание исходного проекта

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

4


 

Импорт в репозиторий на сервере VisualSVN

На первом шаге нам понадобится импортировать проект в репозиторий SVN. В доках, в таблице, сказано, для импорта нужно сделать следующее

Project Manager | right-click a project | Add to Version Control.

Система предлагает выбрать из Git, Mercury и Subversion

5

Выбираем Subversion.

Далее перед нами предстает вот такое окно, в котором нам нужно заполнить URL репозитория, и комментарии.

6

 

Заполняем эти данные. Я создал на своем 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.

Что же — нам нужен не корень Репозитория, а директория проекта в репозитории, тогда выбираем второй вариант.

 

7

Получаем следующую картину

8

 

Все 4 файла, которые отправляли на сервер — находятся там. Хотя на локальном диске 6 файлов на данный момент — видимо какие-то дополнительные файлы. Видимо менеджер импорта что-то учел и загрузил только 4 файла. Ну в общем, посмотрим, что дальше будет.

9

 


Выделение рабочей копии из репозитория

В документации по этому поводу написано

File > Open from Version Control
How To: Checkout a Copy of a Repository.

Итак, закроем текущий проект и откроем новый, который будет под контролем версий.

Delphi опять нас спрашивает о системе контроля версий — выбираем SubVersion

10

Далее самое интересное — нам нужно выбрать путь из которого Delphi загрузит файлы проекта для контроля версий и путь, в котором у нас будет находиться рабочая копия. Сделаем это следующим образом.

11

В начале поста мы создали специальную папку для экспериментов DelphiSVN, в ней же создадим WorkFolder, в которую загрузим файлы с сервера.

Delphi благополучно загрузит файлы и спросит какой проект открыть.

12

 

Интересный момент

Тут интересный момент получился. И при импорте на сервер из SourceFolder и при загрузке в WorkFolder Delphi поставила их на контроль — это можно увидеть, если просто зайти в папку DelphiSVN — обе подпапки подсвечены зеленым значком — означающим, что синхронизация с сервером SVN выполнена.

13

 


Сохранение изменений на сервер (Commit)

Сделаем какие-нибудь изменения, например добавим ListBox и одну строку Line1

14

В документации написано следующее

Project Manager | right-click a file | Subversion > Commit.
How To: Commit Changes to Version Control.

Что же, проделаем это…

15

 

Подпишем комментарий и сделаем Commit

16

 

Delphi вернула нас к проекту.


Просмотр лога

В документации написано

Do either of the following:

How To:

Выберем первый вариант.

17

В принципе, у нас полноценный такой лог, в котором мы видим и комментарии и ревизии и какие файлы были модифицированы.

18


Просмотр различий между ревизиями

В документации написано

History tab | click the Differences tab.
How To: Diff (Compare) Versions of a File.

Проделаем это. В левой части выберем предыдущую ревизию, то есть вторую. Во второй половине выберем следующую ревизию, то есть третью. Если подвести мышью к строке ревизии — во всплывающей подсказке написаны наши комментарии. Например FirstImport или Added Memo and Line1.

Также цветом подсвечено — что добавилось, а что убавилось. Слева плюсы и минусы, я так понимаю, в плюсе то, что добавилось, в минусе — то, что было.

19

Посмотрим на второй файл из выпадающего списка выше, Unit.dfm — здесь также, Delphi дружелюбно нам подсвечивает, что изменилось.

20

 


Просмотр аннотаций

Просмотр аннотаций в Delphi — это по сути соответствие ревизия — строка. В документации написано, что таким образом можно узнать «возраст» строки. Пока не представляю где это может быть нужно, но тем не менее.

В документации это выглядит следующим образом

History tab | click Annotate.bmp (Annotate).
How To: Use the Annotation Feature.

Нужно выбрать Юнит

Потом выбрать ревизию

И нажать на аннотацию

21

После просмотра получаем следующее

22

 

Движемся дальше


Update

Если на сервере кто-то что-то поменял, и нам нужна позарез свежая копия, то делаем Update.

Project Manager | right-click a file | Subversion > Update.
How To: Update a Local Copy of a File under Version Control.

Update файла…


23

 

Update проекта в целом

24

 


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.

Проделаем это

25

В логе эта операция никак не отражается.


Откат изменений

В той таблице, по которой мы следовали откат изменений прямо не описан, но тут ничего сложного. Зайдем в лог и сделаем Revert на той ревизии к которой хотим вернуться.

26

 

Delphi переспросит нас —  в здравом ли мы уме?

27

Далее возможно выпадет вот такая ошибка

28

Просит обновиться сначала, что же — сделаем это и повторим Revert

29

Согласимся на перезагрузку и увидим следующее

30

 

После отката — если нам действительно нужно это состояние — нужно сделать Commit — закрепить это состояние на сервере.

31

 

Ну и последее — смотрим лог

32

В общем, мы проделали все основные операции по работе с клиентом. По поводу командой работы и модели слияния — напишу в отдельном посте.