Альтернативой ветвям для функций могут быть переключатели функций (т.е. переключатель в коде, который может сделать функцию доступной или нет).Они могут быть действительно полезны в этом отношении.Они могут позволять разрабатывать и развертывать новые функции, но доступны только после того, как переключение ... хорошо переключено (это даже слово).Я полагаю, что это что-то вроде идеи Google Labs.
Следует отметить, что эти переключатели также могут вызывать драмы сами по себе, если они не будут тщательно рассмотрены и проверены во время разработки.Фактически вы увеличиваете объем тестирования, которое вам необходимо выполнить, чтобы увидеть, как обстоят дела с включенной и отключенной функцией.Если у вас есть несколько разрабатываемых функций, вам нужно увидеть, как все они взаимодействуют с различными комбинациями включенных / отключенных состояний.
Сказав, что, если все сделано хорошо, они также предлагают большие преимущества.Вы можете предоставить возможность определенным пользователям (опытным пользователям, сторонникам этой функции и т. Д.), Не затрагивая всех.Если считается, что это вызывает проблемы, его можно отключить путем изменения записи в БД о наличии какого-либо элемента конфигурации.
Как только определенная функция считается проверенной, рекомендуется убрать переключатель и просто сделать его частью общего приложения.
Сказав это, я не думаю, что разветвление функций является плохим, но оно полагается на то, что все понимают концепцию управления исходным кодом и слияния и гарантируют, что ветви не слишком расходятся с основнымиветвь, вызывающая одно массивное слияние типа OMG.
Недавно я посетил конференцию, организованную Thoughtworks, где Мартин Фаулер обсуждал эту тему.Доклад был посвящен непрерывной доставке и тому, как это может помочь преодолеть медленные и рискованные развертывания.См. http://www.thoughtworks.com/events/thoughtworks-continuous-delivery-devops или просто выполните поиск для непрерывной доставки для получения дополнительной информации.