Какое программное обеспечение вы разрабатываете? Термоусадочная пленка? Проект с открытым исходным кодом? Если это так, то используйте подход «ветвь по выпуску» или «нестабильная магистраль». Особенно, если ваши циклы выпуска раз в шесть месяцев до года.
Но если вы поддерживаете веб-проект, в котором изменения происходят на более коротких частотах, например, раз в несколько недель или меньше, то используйте подход «ветвление по функциональности» или «стабильный ствол». Проблема с этим подходом состоит в том, что интеграция нескольких изменений функций, которые имеют широкие изменения, делает процесс слияния менее увлекательным. Это действительно очень сложно.
Но оба они работают хорошо, но что, если вам нужны оба? То есть, у вас есть проект, который развертывает сообщения раз в пару недель с большими изменениями функций, но вы обнаружите, что у вас есть ряд исправлений ошибок, которые вы не можете ждать, пока эти изменения будут готовы. Магистраль - это ваша ветка релиза с подходом "ветвь по функциям". Что, если бы вы могли получить как релизы, так и их собственные ветки?
Посмотрите эту запись в блоге Боба Арчера из CollabNet. Его стратегия Agile Release дает вам лучшее из обоих. Я использовал это. Это очень гибкий. Даже если Боб не показывает это на своей диаграмме, вы можете иметь несколько веток релиза одновременно. Это означает, что у вас может быть одна ветвь релиза, готовая к развертыванию, и другая, готовящаяся к финальным проверкам качества. Но нужно учитывать две вещи:
Во-первых, насколько хороши ваши разработчики при слиянии? Вы не можете использовать подход гибкой стратегии выпуска самостоятельно, даже если это небольшая команда. Каждый должен внести свой вклад, и он действительно должен понимать слияние и инструменты, которые он использует для слияния.
Во-вторых, вам понадобится хорошее понимание изменений, которые уже готовы, и тех, которые должны быть. Управление релизами является ключом к тому, чтобы заставить эту работу работать как часы. Каждая функция, когда она будет готова, должна быть привязана к ветке релиза и объединена с ней.
Какой бы подход вы ни выбрали, все зависит от того, что вы разрабатываете, и частоты изменений, которые вы выпускаете для этого развития.