Недавно я переключился с SVN на Mercurial. Теперь мне интересно, как реализовать мой намеченный поток ветвящихся работ в Mercurial в соответствии с хорошей практикой, надеясь, что другие разработчики поймут, что происходит в репозитории.
Это рабочий поток:
- Обычно у меня есть ветвь trunk/default, где происходит работа над текущей серией выпусков. Скажем, что это 1.x. В то же время я использую ветку 2.x для работы над следующим основным выпуском. Изменения в этой ветке могут быть радикальными, поэтому слияние с веткой trunk/default/1.x здесь не имеет смысла.
- Через некоторое время работа над 2.x может быть завершена, и версия 2.0 будет выпущена. Теперь я хочу, чтобы ветка 2.x была новой ветвью по умолчанию/магистрали, а текущая строка по умолчанию /trunk была ветвью 1.x.
- Повторяя этот процесс, может появиться новая ветка 3.x. Как и прежде, если 3.0 будет выпущен, 3.x должен стать новой ветвью по умолчанию, тогда как текущее значение по умолчанию должно стать ветвью 2.x(снова).
Мой вопрос не в том, хороший ли этот поток работы (я думаю, это не принципиально неправильно). Мои вопросы касаются того, может ли я реализовать это в Mercurial, как хорошую практику или если есть лучшие возможности.
Итак, вот как я планирую управлять ветвями в Mercurial...
Начиная с репозитория с одной ветвью, которая содержит код текущей серии выпусков 1.x:
$ hg init
$ echo "hello world" > file1.txt
$ hg ci -A -m "Initial commit of 1.x code"
Начните работу над выпуском 2.x:
$ hg branch 2.x
$ hg ci -m "Create new branch for 2.x development"
$ echo "Big new feature for 2.x" > file2.txt
$ hg ci -A -m "Add big new feature"
Между тем, сделайте некоторую работу в текущей серии выпусков (1.x):
$ hg up default
$ echo "Minor adjustments specific for 1.x" > file3.txt
$ hg ci -A -m "Minor adjustments"
Через некоторое время релиз 2.0 готов, yippee! Установите ветвь по умолчанию на 1.x и 2.x по умолчанию:
$ hg up default
$ hg branch 1.x
$ hg ci -m "Make default branch to 1.x branch"
$ hg up 2.x
$ hg ci --close-branch -m "Close branch 2.x"
$ hg branch --force default
$ hg ci -m "Make former 2.x branch to new default"
Теперь создадим новую ветку 3.x и работаем в ней, также работаем по умолчанию. Опять же, через какое-то время 3.0 готов, и снова нужно управлять именами ветвей:
$ hg up default
$ hg branch --force 2.x # (reuse previously closed 2.x branch name)
$ hg ci -m "Make default branch to 2.x branch"
$ hg up 3.x
$ hg ci --close-branch -m "Close branch 3.x"
$ hg branch --force default
$ hg ci -m "Make former 3.x branch to new default"
Теперь репо может выглядеть так ( "o" - это головы):
o Branch default (3.x)
|
| o Branch 2.x
\|
| o Branch 1.x
\|
|
.
Главное, что я не уверен в том, что если повторно использовать имена ветвей и жонглирование с именем ветки по умолчанию - хорошая практика.
Много текста для этого вопроса - извините, но я хотел четко сказать, что я делаю.