В данной статье посмотрим как в ручную править конфликты. В общем случае – система предложит готовые варианты из которых можно будет что-то выбрать. Но не стоит расслабляться. TortoiseSVN это программный интеллект, а не человеческий, и ему дано лишь только то, что дано. И если бездумно нажимать по клавишам – можно приплыть. Попробуем проиллюстрировать такой случай.
Создание проекта
Создадим проект VCL и импортируем его на сервер VisualSVN в директорию trunk.
Project1.exe > Add to Version Control > Subversion >
Теперь добавим кнопку на форму и сделаем Commit прямо из Delphi
Если посмотрим на лог прямо из Delphi, то увидим следующее
Создание ветви
Теперь выделим отдельную ветвь проекта – сделать это проще всего через TortoiseSVN.
Правой кнопкой жмем на папке, в которой у нас проект, далее TortoiseSVN>Branch/Tag…
Далее переключаемся на работу с ветвью
Правой кнопкой жмем на папке, в которой у нас проект, далее TortoiseSVN>Switch… Руками прописываем директорию, в которую нужно попасть
Теперь на форме удалим TRUNC Button и добавим Edit BRANCH
В принципе вот эта ситуация и вызовет конфликт в дальнейшем. Ведь часто в проектах старая часть не удаляется, а либо изменяется, либо дописывается. А мы здесь удалили кнопку.
Делаем Commit из Delphi, смотрим лог
Вызов конфликта
Теперь попробуем сделать Merge для 65 и 67 ревизий. Вернемся в Trunk через Switch.
Правой кнопкой жмем на папке, в которой у нас проект, далее TortoiseSVN>Switch…
Здесь у нас на форме тоже, что мы и оставляли…
Теперь попробуем сделать Merge.
Правой кнопкой жмем на папке, в которой у нас проект, далее TortoiseSVN>Merge..
Нужно указать конкретную ревизию и ветвь, из которой будем загружать данные для слияния
В результате получим следующее
TortoiseSVN подумал, что мы просто переписываем версией из ветви версию в стволе. Но это не так, откатимся до 65 версии в стволе. Ещё раз перейдем в ветвь – изменим что нибудь там, например габариты Edit и прокомиттим её. Вернемся в ствол и попробуем сделать слияние – получим следующий конфликт…
Попробуем нажать на Edit Conflict и разрешить его.
Получаем вот такое вот мясо…
Ясно, что тут всё перемешано! И возможна только ручная правка…
Ручное решение конфликта
Для правки я воспользовался вот этим вот редактором, из 2-х частей составил третью
Готовый текст в ручную вставил в Unit1.dfm через блокнот и тогда всё заработало как нужно. На форме оказался элемент TrunkButton и BRANCH Edit. Этих сложностей не было бы, если бы мы не удалили кнопку после выведения в ветвь из основного проекта, но тогда и не было бы конфликта и иллюстрации того, что модель слияния не так проста как кажется. Я так понимаю могут возникнуть случаи, где надо будет крепко подумать.