Delphi. SVN. Модель слияний

Данная статья про модель слияний и её применение в проекте Delphi. Из книги svn-book мы знаем следующее о слиянии.

1

В какой-то момент проект копируется и уходит в ветвь. Развитие идет параллельно в ветви и стволе. На рисунке это происходит в момент ревизии r341, далее авторы, в данном случае 2 автора продолжают работать с разными версиями, делают ревизии каждый в своей ветви, стволе. После чего происходит слияние с возможным разрешением конфликтов. Оно не указано на рисунке. Я могу, конечно, в чем-то ошибаться, поправьте меня, если это не так.

Это очень похоже на теорию множеств из математики. M0 на рисунке это тот код, над которым работают разработчики, каждый из них работает в своей ветви, кто-то в стволе. M1 и M2 соответственно это множества, которые изменяются разработчиками, они являются подмножествами M0, и при слиянии, если пересечения M1 и M2 не было, то всё сливается без проблем. А вот если пересечение есть – нужно в ручную править, выбирать тот или иной вариант из подмножеств, либо написать третий.

23

Попробуем такую штуку проделать в Delphi.

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

Создадим обычный VCL проект и импортируем его на сервер VisualSVN в папку trunk, предварительно подготовив для него структуру директорий таким образом. О том как импортировать из Delphi смотрите предыдущую статью.

2

Итак, если мы будем смотреть из Repo-Browser  Delphi, то будем видеть такую картину

4

Причем папка на локальном диске, из которой мы импортировали, автоматически встанет под контроль версий, о чем нам просигнализирует зеленая иконка.

5

Копирование проекта в другую ветвь

Я не нашел как создавать ветви из Repo-Browser Delphi – возможно плохо искал, возможно, действительно нет. Отображать – он всё прекрасно отображает, а вот создать новую ветвь на сервере – не получается.

Альтернативный путь – создание ветви из Repo-Browser TortoiseSVN или на крайний случай – через сам сервер VisualSVN. Словом, варианты есть. Воспользуемся TortoiseSVN.

Итак, на нашей папке DelphiMerge жмем правой кнопкой мыши, открываем меню TortoiseSVN и выбираем Branch / Tag…

Здесь внимание !!! Ничего не добавляем в ручную! Никаких папок ни на сервере ни на клиенте. Просто пропишем путь для ветви – где бы мы хотели её создать. TortoiseSVN сам всё сделает и расставить родственные связи между папками. Подпишем комментарий – выберем номер ревизии, в нашем случае подойдет HEAD ревизия.

7

 

Вот результат

8

 

В принципе это всё, что нам нужно было от дружелюбного TortoiseSVN. Далее возвращаемся к Delphi.

Переключение на работу с ветвью

Возвращаемся в Delphi. И жмем Switch

9

 

После чего выбираем директорию новой ветви – 2 раза жмём Ок.

10


 

 

В Delphi в общем случае обязательно делать Update после переключения (switch) на ветвь / ствол / tags или что угодно !!!


Заходим в LOg, чтобы убедиться, что мы в нужной ветви

11

Что у нас есть здесь? 9 ревизия – создание новой ветви! Значит мы там, где нужно. Можем приступать к реализации новой идеи проекта в отдельной ветви. Добавим Memo и напишем какой-нибудь текст.

12


 

Возвращаемся в ствол

А тем временем в команде тихо кипела работа над стволом и там тоже были кое какие изменения!!! Ну а если нет – мы возьмем их сами и сделаем !!!

Итак Switch на trunk и Update

14

15

Далее делаем Update

16

На форме изобразим какую-нибудь активность. Как будто в стволе тоже кое что происходило!!!

17


 

Слияние ствола и ветви

Выбираем Merge…

18

19

 

Выбираем URL и диапазон ревизий. URL это месторасположение файлов в нашей ветви. Диапазон ревизий. 9 ревизия – это когда мы создали копию. 10 ревизия, это когда мы прокомиттили изменения в ветви.

20

 

В следующем окне я ничего не менял

 

21

 

И вот уже Delphi рапортует об успешном слиянии.

22

 

Внимание, эта статья не окончена и врят ли будет окончена. Слияние можно производить как из Delphi так и из TortoiseSVN. Экспериментируйте.