Tudo depende do processo geral de desenvolvimento de software. O gerenciamento de configuração e como uma nova versão se inicia não podem ser definidos sem o conhecimento do processo geral.
Existe a facção "ágil" que optaria por uma "área de comprometimento sempre trabalhando primeiro". Eles executavam instalações automatizadas de construção e teste constantemente nessa área e tentavam ter um sistema operacional "o tempo todo".
Eles veriam o (mestre) -> (versão) com talvez 1,2 etapas intermediárias da organização como benéfico.
Depois, há a facção mais "clássica", que possui um processo orientado por etapas de planejamento e integração planejada para marcos, em que uma liberação de "unidade de trabalho" é uma atividade planejada com requisitos como "somente liberação quando é testada (unidade)" e deveria se encaixar no próximo marco planejado ". Lá, o planejamento compreende o controle de versão de "unidades de trabalho" e, geralmente, mede o comprimento para definir como a próxima versão planejada do produto deve parecer em termos de recursos e correções. Para fins de planejamento, eles querem saber que o que um desenvolvedor libera é "adequado" e um ato consciente de comprometer uma unidade de trabalho.
Essa abordagem clássica não significa necessariamente que haja períodos mais longos em que não haja uma compilação completa do produto disponível.
Portanto, o fluxo de trabalho "clássico" seria: (dev) -> (unidade) -> (integração) -> (teste / qa) -> (produção).
O papel do integrador é "aceitar / comprar" unidades liberadas ou rejeitá-las se elas não atenderem às necessidades do próximo lançamento.
Em uma nota lateral, também é possível combinar essas duas abordagens básicas de maneira oportuna.
Da minha experiência (que era principalmente na área de uso da abordagem "clássica"), a abordagem "clássica" funcionou decentemente bem em projetos de cerca de 4-50 pessoas em uma equipe.