Ao migrar de algo para outro, há apenas duas coisas que você precisa definir:
- Qual é o seu alvo
- Como chegar lá (o plano de migração)
A primeira parte é, infelizmente, muitas vezes esquecido ou forma muito vaga. Você não pode simplesmente dizer que o que tem é uma bagunça e deseja organizá-lo. O que isso significa? Todo mundo teria uma interpretação diferente (aka: cada dev pensa que sua ou sua maneira de fazer as coisas é a melhor).
Provavelmente, todos os ramos que você tem estão servindo ou serviram a um propósito. Sem um processo-alvo claramente definido, as pessoas continuarão fazendo o que funciona para elas da maneira que melhor lhes convier (e com razão).
Por exemplo, seu destino deve ser definido tão claramente quanto Vincent Driessen definiu seu "modelo de ramificação Git bem-sucedido" . Se você observar esse modelo, é muito preciso: indica onde o código estável deve estar e onde os recursos instáveis devem ser desenvolvidos. Também diz como - e quando - ramificar, atualizar e mesclar de volta. Você sabe para que serve cada ramo e o que fazer com eles. Usamos uma variação do que foi apresentado por Vincent e nossa variação é definida em nosso wiki.
O ponto importante é fazer com que toda a equipe entenda e concorde com um alvo. Pode valer a pena lembrar às pessoas que você não está procurando seu modelo de ramificação favorito pessoal, mas um modelo com o qual todos os membros da equipe possam concordar e usar com facilidade.
Depois de atingir sua meta, você poderá elaborar seu plano de migração. Esse plano pode ser tão longo ou curto quanto você desejar. Eu já vi esse modelo de ramificação imposto da noite para o dia; em outros lugares, foi realizado mais de 2 ou 3 sprints. Não importa muito para mim, enquanto estamos melhorando.
Você pode começar com os "maiores" ou mais importantes ramos. Por exemplo: "a partir de agora, o mestre deve sempre estar em um estado para ser implantado no prod e o ramo dev deve sempre compilar" (ou quaisquer que sejam suas regras). Em seguida, imponha ramificações de versão (liberação). Depois, imponha ramificações de recursos. Depois disso, imponha um congelamento de código na ramificação da versão, se fizer sentido.
DevOps tem tudo a ver com comunicação, abertura e eficiência. Esses conceitos devem ser mantidos em mente e comunicados ao longo do processo.
Sugiro convidar algumas pessoas de fora da equipe de desenvolvimento para a reunião do processo como observadores. Ops ou gerência intermediária podem ter uma coisa ou duas a dizer sobre seu modelo. As necessidades dos desenvolvedores devem ser priorizadas, mas se o modelo de ramificação for impossível de se alinhar com a maneira como as coisas são gerenciadas, você saberia melhor agora e não em um mês ou dois.
Se você tem equipes realmente grandes, tente incluir todos, no entanto. Com equipes muito grandes, você terá duas ou três reuniões de qualquer maneira. Convide os líderes da equipe para a sala, mas tenha um webcast disponível e informe a todos sobre isso. Se alguém tiver uma sugestão ou preocupação, ela poderá expressá-la ao líder da equipe e, se for válida, ela será abordada na segunda ou terceira reunião.