Полное объединение двух веток


Что бы завершить наш текущий пример, заглянем немного в перед. Предположим, прошло несколько дней и как в главную линию разработки так и вашу личную ветку было внесено множество изменений. Допустим, что работу над своей веткой вы завершили; добавление функциональности или исправление ошибок наконец закончено и теперь вы хотите объединить все изменения из своей ветки с главной линией разработки.

Как же в этом случае нужно использовать svn merge? Помните о том, что эта команда сравнивает два дерева и применяет различия к рабочей копии. Поэтому, для того, что бы было к чему применять изменения, необходимо иметь рабочую копию главной линии разработки. Будем считать, что-либо у вас под рукой имеется такая (полностью обновленная) копия, либо вы только что создали новую рабочую копию /calc/trunk.

А какие именно два дерева должны сравниваться? На первый взгляд ответ очевиден: сравнивать последнее дерево главной линии разработки с последним деревом вашей ветки. Однако будьте осторожны — такое предположение является ошибочным, многие новые пользователи ошибаются подобным образом! Учитывая то, что svn merge работает так же как svn diff, сравнение последние версии главной линии разработки и вашей ветки покажет изменения сделанные не только в вашей ветке. Такое сравнение покажет слишком много изменений: будут показано не только то, что добавлялось в вашей ветке, но и то, что удалялось в главной линии разработки и не удалялось в вашей ветке.

Для выделения только тех изменений, которые были сделаны в вашей ветке, нужно сравнивать начальное и конечное состояния ветки. Воспользовавшись svn log для ветки, можно узнать, что она была создана в правке 341. А для определения конечного состояния ветки можно просто использовать правку HEAD. Это значит, что вам нужно сравнить правки 341 и HEAD директории с веткой и применить различия к рабочей копии главной линии разработки.



Содержание раздела