Quero saber como gerenciar um grande projeto com muitos componentes com o sistema de gerenciamento de controle de versão.
No meu projeto atual, existem 4 partes principais.
- Rede
- Servidor
- Admin Console
- Plataforma.
A parte da web e do servidor usa 2 bibliotecas que escrevi. No total, existem 5 repositórios git e 1 repositório mercurial. O script de construção do projeto está no repositório da plataforma. Ele automatiza todo o processo de construção.
O problema é que, quando adiciono um novo recurso que afeta vários componentes, tenho que criar ramificação para cada repositório afetado. Implemente o recurso. Mesclar de volta. Meu pressentimento é "algo está errado".
Então, devo criar um único repositório e colocar todos os componentes lá? Acho que a ramificação será mais fácil nesse caso. Ou apenas faço o que estou fazendo agora. Nesse caso, como resolvo esse problema de criação de ramificação em cada repositório?
fonte
Respostas:
Na situação que você descreve, você não está obtendo nenhum benefício por ter vários repositórios, mas tem um custo: não pode reverter para uma versão mais antiga de um repositório e tem certeza de que seu sistema continuará funcionando. Isso ocorre porque seu código está fortemente associado aos repositórios. Como a confiança na capacidade de reverter é um dos principais benefícios do controle de origem, essa não é a situação em que você deseja estar.
A solução é definir sua estrutura de repositório com base no acoplamento do código: se o componente A do projeto compartilhar apenas interfaces estáveis com o componente B do projeto, elas poderão ser colocadas em repositórios separados. Caso contrário, eles devem ser colocados no mesmo repositório. Um layout de repositório mais granular refletirá uma arquitetura de sistema fatorada melhor.
fonte
Se cada um de seus repositórios for projetos ou bibliotecas independentes, eu diria que não há nada inerentemente errado em precisar criar ramificações de recursos em cada repositório ao adicionar novos recursos que se cruzam entre os projetos. Por serem independentes, cada um pode ter uma versão independente e você pode descontinuar APIs antigas.
Mas no seu caso particular, parece que seus repositórios podem não estar agrupando seu código de maneira eficaz. Se as alterações no código em um repositório exigirem alterações em outros (descontinuação), seu acoplamento é muito apertado ou os repositórios devem ser reorganizados.
Se todos os repositórios são realmente parte do mesmo projeto (eles não podem ficar sozinhos), talvez você deva ter apenas 1 repositório. (Ou talvez 2: o projeto principal e outro para a funcionalidade genérica / padronizada.)
fonte