Как вы заметили, одна из целей использования ветки состоит в том, чтобы отделить определенные колебания кода от фиксации заявок и разработки функций от магистрали. Но как только функция или тикет завершены, вы должны объединить их обратно. В Subversion ветки лучше использовать для отслеживания наборов связанных функций (например, для выпуска), а не отдельных функций. В противном случае вы быстро столкнетесь с неуправляемым количеством филиалов.
Кроме того, зачем вообще задерживать интеграцию? Чем дольше вы ждете между выпусками, тем выше вероятность того, что ваше изолированное изменение вступит в конфликт с другим произведенным с тех пор изменением и / или приведет к дальнейшей нестабильности в вашей системе после объединения.
Моя любимая стратегия - сделать что-то вроде этого:
[begin work on 0.4 branch]
|
|
v
(*)---(*)-------(a)--(b)---(c)-- <-- Trunk is "unstable".
\ | | Contains all commits.
ver \ [merge from trunk] Developers commit to trunk.
<-- 0.3 \ v v
+---(a)--------(c)-- <-- Branch is "stable".
Contains selected commits from trunk.
Know beforehand what's going onto branch.
Теперь, когда вы будете готовы к выпуску:
[trunk]
(*)---(*)---(*)----------------------------[development continues]--->
[0.4 branch] No further development on branch unless
(*)---(*)---(*)---[0.4-release] spot fixes are needed. Then re-tag (0.4.1)
^ and re-release.
|
|
[make tag on branch; release from stable branch,
not unstable trunk]
Я знаю, что вы спрашивали о лучшем способе принуждения вашей системы непрерывной интеграции к этому. Но я бы с уважением предположил, что, учитывая, что Хадсон признан относительно способной CI-системой, тот факт, что у вас много трудностей, чтобы вставить свою модель разработки в нее, является возможным признаком того, что это не тот процесс, который хорошо подходит для CI. во-первых.
Наша обычная практика - иметь две базовые сборки на проект: одну против транка и одну против текущей ветки релиза. Таким образом, вы знаете, что:
- Все, что обновляется, корректно интегрируется (
trunk
)
- Какой бы ни была ваша цель релиза, если вы перестанете работать сейчас, у вас все равно будет правильная и работающая (просто не полностью функциональная) сборка.