Christopher fez um excelente trabalho ao enumerar as desvantagens de um modelo de um projeto por repositório. Gostaria de discutir alguns dos motivos pelos quais você pode considerar uma abordagem de múltiplos repositórios. Em muitos ambientes em que trabalhei, uma abordagem com vários repositórios tem sido uma solução razoável, mas a decisão de quantos repositórios ter e onde fazer os cortes nem sempre foi fácil.
Na minha posição atual, migrei um gigantesco repositório CVS de repositório único, com mais de dez anos de história, para vários repositórios git. Desde essa decisão inicial, o número de repositórios aumentou (por meio de ações de outras equipes), a ponto de suspeitar que temos mais do que seria ideal. Alguns contratados sugeriram a fusão dos repositórios, mas eu argumentei contra isso. O projeto Wayland tem uma experiência semelhante. Em uma palestra que vi recentemente, eles tinham, a certa altura, mais de 200 repositórios git, pelos quais o líder se desculpou. Olhando para o site deles , vejo agora que eles têm 5 anos, o que parece razoável. É importante observar que unir e dividir repositórios é uma tarefa gerenciável, e não há problema em experimentar (dentro do razoável).
Então, quando você pode querer vários repositórios?
- Um único repositório seria muito grande para ser eficiente.
- Seus repositórios são fracamente acoplados ou desacoplados.
- Um desenvolvedor normalmente precisa apenas de um ou de um pequeno subconjunto de seus repositórios para desenvolver.
- Você normalmente deseja desenvolver os repositórios de forma independente e precisa sincronizá-los apenas ocasionalmente.
- Você deseja incentivar mais modularidade.
- Equipes diferentes trabalham em diferentes repositórios.
Os pontos 2 e 3 são significativos apenas se o ponto 1 for válido. Ao dividir nossos repositórios, reduzi significativamente os atrasos sofridos por nossos colegas externos, reduzi o consumo de disco e aprimorei o tráfego de rede.
4 e 5 são mais sutis. Quando você divide os repositórios, digamos, de um cliente e servidor, isso torna mais caro coordenar as alterações entre o código do cliente e do servidor. Isso pode ser positivo, pois incentiva uma interface dissociada entre os dois.
Mesmo com as desvantagens de projetos com vários repositórios, muito trabalho respeitável é feito dessa maneira - wayland e boost vêm à mente. Não acredito que um consenso sobre as melhores práticas tenha evoluído ainda e que seja necessário algum julgamento. Ferramentas para trabalhar com vários repositórios (git-subtree, git-submodule e outros) ainda estão sendo desenvolvidas e experimentadas. Meu conselho é experimentar e ser pragmático.