Вы могли всегда посмотреть на Шахматы GNU код.
как поддерживать старые выпуски без создания отдельных долгоживущих веток
Сопровождение веток часто выполняется для каждого выпуска и является долгоживущим, поскольку они служат для исправления ошибок, характерных для этого выпуска , и не все нужно снова объединять в текущую разработку.
1 / Что делать с веткой "maint"? Я так понимаю, что указатель "maint" должен быть перемещен в то же положение, что и "master"? Как?
Я не уверен, зачем вам повторно использовать maint здесь. перебазирование не сработает.
Может быть
$ git checkout maint
$ git reset --merge c102
Поскольку 'maint' уже был объединен с мастером, я предполагаю, что этот сброс не приведет к обновлению каких-либо новых файлов в мастере.
Я только что проверил его:
alt text http: // img188. imageshack.us/img188/4425/resetmerge.png
Он действительно перемещает ГОЛОВУ 'maint', не касаясь каких-либо файлов в мастере.
2 / Как потом сделать вилку ветки 'maint' из branch 'master'?
Что ж, сброс переместил бы заголовок 'maint' в текущую разработку: если C102 - это v2, все, что вам нужно, это проверить 'maint', и вы сразу же выполните вилку.
Это даст вам:
альтернативный текст http://img36.imageshack.us/img36/91/resetmerge2.png
3/, если появится патч (истекает очень долго, например, текущая функция -release v10.0) для старого "tag: maint-rel v1.0.1",как интегрировать его в maint и в master?
Там вам нужно создать «именованную ветку обслуживания»:
$ git checkout -b maint-1.0 c50
$ # work on patch
$ git checkout maint
$ git cherry-pick ... # only merge what you need in maint
$ git checkout master
$ git cherry-pick ... # only merge what you need in maint
Примечание: вы можете не захотеть объединять одно и то же в maint (что может все еще потребоваться некоторая часть исправления сделана в maint-1.0) и master (которые могли развиться настолько сильно, что большая часть исправления больше не актуальна)