?

Log in

svn branching - homo_virtualis
View:Recent Entries.
View:Archive.
View:Friends.
View:Profile.

Tags:
Security:
Subject:svn branching
Time:12:43 pm

Лучше поздно, чем никогда.

Постом на который ссылался аудиослейв некоторое время назад навеяло. Расскажу про наш способ работы с svn-бранчами.

Идея заключается в том, что запоминать с какой же именно ревизии ты отпочковался - накладно. Пусть об этом помнит машина. Для этого мы используем свойство svn о том что сливание веток это всего лишь получение диффа двух поддеревьев и применение его к третьему. Значит вместо записывания ревизии почкования мы можем создать два бранча "рабочий" и "эталонный". А потом найти разницу между ними как итог работы в бранче.

"Рабочий" бранч будет называться как обычно branches/$branch, а "эталонный" branches/$branch--base. В качестве названия бранча я, как правило, использую номер задачи из багтрекера, например FOOBAR-28.

создание бранча

# "базовый" бранч
svn cp $prj/{trunk,branches/$branch--base}`

# "рабочий" бранч
svn cp $prj/branches/$branch{--base,}

# чекаут нового рабочего бранча, начинаем работу
svn co $prj/branches/$branch
cd $branch

вливание бранча в транк

Следствием того, что каждая задача багтрекера - бранч, их жизнь скоротечна и вливание в транк гораздо более частая задача, чем обновление бранча из него. Эта операция проходит, как и предполагалось.

# локальная копия транка для сливания
svn co $prj/trunk $branch--merge
cd $branch--merge

svn merge $prj/branches/$branch{--base,}

# проверяем, что все работает и коммитим
svn ci

обновление бранча из транка

Эта операция чуть более сложная, но все же доступная для понимания =)

# так как мы сольемся с транком "эталонный" бранч должен стать идентичным 
# текущему транку
svn cp $prj/{trunk,$branch--new-base}

# сливаем все изменения от старого "эталонного" до нового
cd $branch
svn merge $prj/branches/$branch--{base,new-base}

# подменяем "эталонный" бранч
svn rm $prj/branches/$branch--base
svn mv $prj/branches/$branch--{new-base,base}
comments: Leave a comment Previous Entry Share


amdei
Link:(Link)
Time:2009-02-15 07:51 am (UTC)
git forever?
(Reply) (Thread)


elephantum
Link:(Link)
Time:2009-02-15 08:17 am (UTC)
это не важно, когда вся разработка в яндексе сидит на svn, консистентность важнее некоторых преимуществ в удобстве.
(Reply) (Parent) (Thread)


amdei
Link:(Link)
Time:2009-02-15 08:34 am (UTC)
Ох уж это слово "консистентность"....
Да, согласен. Чем больше людей чем-то пользуются, тем сложнее это заменить.

Оно конечно говнецо, но своё, родное, привычное...
(Reply) (Parent) (Thread)

hoxuseth
Link:(Link)
Time:2011-04-09 12:55 pm (UTC)
I don’t usually reply to posts but I will in this case.

(Reply) (Thread)

svn branching - homo_virtualis
View:Recent Entries.
View:Archive.
View:Friends.
View:Profile.