Відповідь залежить від розміру вашої команди та якості вашого джерела управління та вміння правильно об'єднати складні набори змін. Наприклад, повне управління джерелами гілок, наприклад CVS або SVN, може бути важким, і вам може бути краще з першою моделлю, тоді як якщо ви використовуєте більш складну систему, як IBM ClearCase, і з більшим розміром команди, ви можете бути краще з другою модель або комбінація двох.
Я особисто розділив модель функціональної гілки, де кожна основна особливість розробляється на окремій гілці, із підгалузями завдань для кожної зміни, виконаної окремим розробником. По мірі стабілізації функцій вони об'єднуються в багажник, який ви зберігаєте достатньо стабільний і проходить усі регресійні тести в будь-який час. Коли ви підходите до кінця циклу випуску та з’єднуються всі гілки функцій, ви стабілізуєте і гілку гілки системи випуску, на якій ви робите лише виправлення помилок стабільності та необхідні опори, тоді як магістраль використовується для розробки наступного випуску, і ви знову відділення для нових функціональних гілок. І так далі.
Таким чином магістраль містить завжди найновіший код, але вам вдається зберегти його досить стабільним, створюючи стійкі мітки (теги) на основних змінах і злиттях функцій, гілки функцій мають швидкий темп розвитку з постійною інтеграцією і окремі підрозділи завдань можуть бути часто оновлений з гілки функцій, щоб синхронізувати всіх, хто працює над тією самою функцією, одночасно не впливаючи на інші команди, що працюють над різними функціями.
У той же час у вас є історія набору відділень випусків, де ви можете надати зворотні списки, підтримку та виправлення помилок для своїх клієнтів, які з будь-якої причини залишаються на попередніх версіях вашого продукту чи навіть на останніх випущених версіях. Як і в магістралі, ви не встановлюєте постійну інтеграцію на гілках випуску, вони ретельно інтегруються після проходження всіх регресійних тестів та іншого контролю якості випуску.
Якщо з яких-небудь причин дві функції є взаємозалежними і потребують змін, що вноситься один з одним, ви можете розглянути як розробляти обидві в одній гілці функції, так і вимагати, щоб функції регулярно об'єднували стабільні частини коду в стовбур, а потім оновлювали зміни з магістраль для обміну кодом між гілками магістралі. Або якщо вам потрібно виділити ці дві функції від інших, ви можете створити загальну гілку, від якої ви розгалужуєте ці гілки функцій і яку ви можете використовувати для обміну кодом між функціями.
Наведена вище модель не має особливого сенсу для команд, що не досягли 50 років, та системи управління джерелами без розріджених гілок та належної можливості злиття, таких як CVS або SVN, що просто зробило б цілу модель кошмаром для налаштування, управління та інтеграції.