Я думаю многие любопытные люди уже знают, как нужно верно работать с SVN.
Но во многих статьях это описано достаточно поверхностно. Хочется немного приоткрыть завесу верного цикла версионирования, при разработке проекта, на примере TortoiseSVN.
И так, поехали
Шаг 1. Создание ветви (branch).
Для этого вам нужно создать рабочую копию версии trunk. Далее, чтобы создать ветвь жмём правой кнопкой на данной копии и в контекстном меню выбираем TortoiseSVN -> Branch/tag

В появившеся диалоговом окне введите адрес ветви (самое главное — не создавайте каталог, TSVN сам всё сделает). Так же обязательно введи короткое описание ветви (это является очень хорошим тоном). Если вы сразу хотите приступить работать с ветвью, то отметьте Switch working copy to branch/tag. Тогда ваша рабочая копия будет являться копией, находящейся на сайте

Вот и всё. Ветвь готова.
Шаг2. Возвращение в trunk
Этот шаг для многих очень тяжёлый для начинающих. Чтобы ваши изменения появились в trunk (а они должны там появиться) нужно произвести операцию, известную как Merge.
Итак, поехали.
Создайте обособленно от всех ваших текущих рабочих копию ещё одну копию trunk. Это делается для того, чтобы ваша текущая рабочия копия и её изменения не побились.
На рабочей копии, в контекстном меню, найдите TortoiseSVN -> Merge:

Выберите Merge a range of revisions в появившемся диалоговом окне. Если такого окна не появилось — значит пора обновить TSVN.

Reintegrate a branch тоже справедлива, то есть одно но — далеко не все svn-сервера способны с этим работать (у меня, к сожалению, пока, заставить не получилось). Поэтому мы и воспользуемся проверенным и работающим везде методом.
В новом диалоговом окне нужно нужно указать путь до вашей ветви (URL to merge from) и диапазон ревизий.
Важно! Не указывайте лишь HEAD ревизию — в данном случае сливаться эти версии будут от первой до последней ревизии. Практика показала, что страшного ничего не произойдёт, но всё-таки лучше предостеречься. К тому же, если указать ревизии, то это будет просто быстрее.

В следующем диалоговом окне опции уже идут по вашему усмотрения (но прежде ознакомьтесь со справкой по TSVN). Если вы не уверены, то вы можете посмотреть предварительный результат при помощи кнопки Test Merge. По нажатию на Merge произойдёт слитие всех изменений из ветви в вашу рабочую копию trunk.
Теперь осталось исправить конфликты, убедиться что всё хорошо и делать commit вашей рабочей версии trunk на сервер.
Я весьма советую указывать ревизии, которые вы мержили, в логе сообщений. Так вы не потеряетесь среди ревизий, а для членов вашей комманды будет указатель.
Формат примерно такой:
5000-5010 from ARTICLE1
5000-5010 — это ревизии, ARTICLE1 — имя ветви.
Ну вот и всё. Когда работа на ветвью завершена — данный цикл начинается вновь.
Некоторые утверждают, что после окончания работы с бранчем, его нужно удалить. Здесь уже решайте сами
С уважением,
blog.artsofte.ru
Удачи в разработках!
комментарии (53)
p.s. под win мне меркуриал чуть больше понравился, и черепаха(http://tortoisehg.sourceforge.net/) под него есть
Как говориться, лучше 1 раз увидеть.
Ссылка на главу о ветвлениях и слияниях была бы в посте не лишней.
ветвления это вообще отдельная история. Я вот копаюсь в архивах хабра — может уже есть на самом деле такая статья
Не кажется что тавтология какая-то. Я вот глазами пробежал и нифига не понял о чем пост. Я уж было подумал что тут методика описана как когда и почему делать или не делать ветви. Разные подходы там. Поместили бы подробное описание проблемы вначале хотя бы… примеры какие-нибудь…
Недавно сами перешли на 1.5, стало намного удобней работать светками.
Проблемы git больше со стилем работы — они в git и svn совместимы также, как стиль работы в svn и cvs. Я для себя определился: svn для централизованной разработки в конторе, в том числе, в стиле «кинул файл и забыл», а git — для сетевых FOSS-проектов, когда каждый модуль (репозитарий) — корректный законченный компонент с Makefile и прочими прелестями.
А вообще да, я имел в виду монолитные большие проекты внутри одной конторы.
А по сути вашего вопроса — да, я уверен что существует не один подход к организации репозитария. Любой вопрос в сфере IT можно решить далеко не одним способом, а потом препираться и устраивать холивары на эту тему.
Я предложил, скажем так, один из распространённых методов организации, который описывается не в одном мануале. Просто я решил немного уделить внимания подводным камням, с которыми столкнулся я, с которыми столкнулись знакомые программисты. И видимо столкнутся и остальные, кто ещё о данной технике даже не задумался
ЗЫ. trunk'a может и не быть ;)
спасибо
Ещё я бы добавил аналогичные команды для оригинальной команды svn (для полноты картины), а также ссылку на Subversion book и на её перевод на русский.
Очень нужно!
Некоторое время назад перешел с CVS на SVN — стало заметно удобней.
Но Branch'ами не пользовался, спасибо за подсказку!
сделал у себя локально -> там же протестил -> выложил в транк -> там его проверили тестеры -> если все ок, то выкладываются в ветку со стабильной версией.
вроде как удобнее. нет?
а так вообще статья — много буков и картинок, да не по делу все, в основном.
Если в очередной релиз будет решено отложить фичу А — вы просто не мержите код бранча А в trunk — и получаете релиз без фичи А. Т. е. trunk всегда содержит «стабильный» код, который, в идеале, в любой момент можно забрать из SVN, сбилдить и получить рабочую версию проекта.
какой использовать — вероятно, политика команды и компании
1 — работа с бранчем = Мерж всех общих файлов и мерж своих (все 30+ файлов)
2 — работа с транком = Мерж только общих файлов (~ 5-7 файлов)
По времени 2 способ куда более безболезненный (это плюс). Но есть и минусы, первый и очевидный минус при работе только с транком — все твои изменения хранятся только локально, что есть не совсем гуд, если нет уверенности в железе. Для большинства это огромный минус. Но мне, наверное, очень повезло. Я работаю с макосью и любимая машина времени (Time Machine) постоянно (раз в 3 часа) бекапит _ВСЕ_ измененные файлы.
Выводы: Если есть система локального _тихого_ бекапа можно с чистой совестью работать с транком, если ее нет — добро пожаловать в бренчинг/мерджинг.