Как слить изменения между ветками. Часть 2
Продолжаю тему слияния изменений между ветками, начатую в первой части. В этой заметке, как и обещал, я собираюсь привести подробный пример.
Предположим, что ветка уже сделана, разработка велась активно и в основной ветке (trunk-е) и в специально созданной. Если работа в дополнительной ветке потребует много времени, наверняка потребуется и внесение в неё изменений основной ветки (чтобы упростить в дальнейшем слияние с ней). Такие переносы изменений из основной ветки в дополнительную могут происходить десятки раз за время жизни дополнительной ветки. Частота таких переносов зависит от интенсивности разработки в основной ветке и важности вносимых изменений.
Итак, приступим к слиянию.
Как я уже писал ранее, слияние выполняется в рабочую копию. Значит начнем с вызова контекстного меню каталога, где располагается наша рабочая копия. В этом контекстном меню выбираем пункт «Merge»

Откроется диалоговое окно слияний.

В группе полей “From” выбираем (из списка или через браузер репозитория) урл нашей основной ветки, в поле “Revision” вписываем номер той правки, которая была в момент создания дополнительной ветки, либо последнего слияния изменений из основной ветки. Например, если слияний еще не проводили и дополнительную ветку создали в правке 45, то в поле пишем 45, а если слияние изменений уже делали и последнее было в правке 233, то пишем 233.
Перейдем к группе полей “To”. Чекбокс “Use From URL” оставим включенным, а поле “Revision” заполняем текущим номером правки. Можно текущую правку не вписывать и оставить HEAD, но тогда немного неудобно заполнять комментарий.
После этого стоит произвести пробное слияние с помощью кнопки “Dry run”. При этом происходит выявление изменений между правками, но они не вносятся в рабочую копию. В этом режиме можно посмотреть удачно ли пройдет слияние изменений. Если нет никаких проблем, то можно смело нажимать кнопку “Merge”. Результатом этого станут изменения рабочей копии. Теперь она включает не только наработки в дополнительной ветке, но и изменения из основной ветки.
Удостоверившись, что все работает так как надо, можно делать коммит. В комментарии к комиту настоятельно рекомендуется указать что было слито и откуда. Например, так: “merge from trunk r55:r73 into new_feature branch”. Этот комментарий сильно поможет при дальнейших слияних, т.к. по комментариям комитов всегда видно из какой последней правки было сделано слияние. Вот поэтому я рекомендовал указывать целевую правку принудительно, а не полагаться на HEAD.
Второй этап - слияние изменений дополнительной ветки в основную ветку выполняется аналогично. С отличием только в направлении слияния. Т.е. в поле “From” нужно указать урл ветки, а в ревизиях номера правок с которой началась и которой закончилась ветка (если ранее небыло слияния ветки в основную ветку, иначе начальной ревизией будет правка последнего слияния). Не забудьте, что рабочая копия должна быть основной ветки, а не дополнительной, т.е. предварительно надо либо сделать рабочую копию основной ветки в отдельный каталог, либо переключить рабочую копию на основную ветку командой “Switch”. И не забывайте в комментарии писать о направлении и источнике слияния.
На этом, пожалуй, все.
PS: недавно наткнулся на несколько заметок и контроле версий, рекомендую посмотреть: Эффективное управление проектами (Subversion)
Популярность: 12%
Метки: SVN, tutorial, контроль версий


октября 25, 2008 at 01:20
На самом деле было бы полезно писать консольные комманды (черепашка вроде выводит их в логе).
Понятно что merge будет проводиться в комфортных условиях офиса, но ведь могут быть ситуации когда знание консольных команд не будет лишним.