Для меня ветвление по функциям имеет смысл только в том случае, если у вас достаточно большой проект, чтобы вы могли разумно говорить о «X Feature Team» как о независимом подразделении.
Кроме того, существуют определенные критерии размера (по общему признанию, нечеткие). Если у вас есть 10 разработчиков, то, насколько я понимаю, у вас есть только одна команда разработчиков - не имеет значения, всегда ли двое из них «парни из диалогового окна виджетов» или «парни из базы данных». Вам вполне может понадобиться> 1 ветка разработки, если кто-то проводит серьезный рефакторинг, вносит серьезные изменения в API, изменяет ожидаемое поведение, так что многие BVT не будут работать, и т. Д. Но это не ветвь функций.
Если у вас есть 100 разработчиков, вам могут понадобиться ветки функций. Это зависит от того, насколько тесно связаны ваши функции и насколько дисциплинирован ваш процесс SCM в целом, особенно в отношении качества сборки. Даже если у вас нет функциональных ветвей, у вас наверняка будет некоторая разновидность иерархии ветвей.
Если вы работаете в Windows, слои и слои ветвей объектов - это находка. Если команда оболочки не может быть продуктивной, потому что команда ядра внесла ошибку, это большая проблема.
Конечно, нужно сделать балансировочный акт. Некоторые крупные организации слишком разветвляются. Когда пройдет несколько месяцев, прежде чем код, благословленный функциональной группой X, перейдет в команду Y, боль от слияния + интеграционное тестирование перевесит стабильность кодовой базы, которую вы пытались получить в первую очередь. (отсюда и фраза «глубина вашего дерева от MAIN обратно пропорциональна вашему здравомыслию») И в каждом случае дерево для версии N должно сужаться по мере приближения к своему выпуску, в конечном итоге сворачиваясь до такой степени, что будут выполняться только проверки непосредственно в стволе этого выпуска включены, и каждая ветвь функции эффективно нацелена на N + 1.