Editar: ao contrário de algumas perguntas semelhantes, como Mover um repositório SVN de vários GB para o Git ou /programming/540535/managing-large-binary-files-with-git Meu cenário não envolve vários subprojetos que pode ser facilmente convertido em submodelos git, nem em alguns arquivos binários muito grandes que são adequados para o anexo git. É um repositório único em que os binários são o conjunto de testes que se acopla ao código-fonte principal da mesma revisão, como se fossem compilar ativos de tempo, como gráficos.
Estou investigando a troca de um repositório de código antigo / de tamanho médio / grande (50 usuários, revisões de 60k, histórico de 80Gb, cópia de trabalho de 2Gb) do svn. À medida que o número de usuários cresce, há uma grande quantidade de rotatividade no tronco, e os recursos geralmente são distribuídos em vários commits, dificultando a revisão do código. Além disso, sem ramificação, não há como "bloquear" o código incorreto; as revisões só podem ser feitas após o comprometimento do tronco. Estou investigando alternativas. Eu esperava que pudéssemos mudar para o git, mas estou tendo alguns problemas.
O problema com o repo atual, tanto quanto o git, é o tamanho. Há muito lixo velho lá, e limpá-lo com --filter-branch ao converter para git pode reduzi-lo em tamanho por uma ordem de magnitude, para cerca de 5 a 10 GB. Isso ainda é muito grande. A maior razão para o tamanho grande do repositório é que existem muitos documentos binários sendo introduzidos nos testes. Esses arquivos variam entre .5mb e 30mb, e existem centenas. Eles também têm muitas mudanças. Eu observei os submódulos, o anexo git etc., mas ter os testes em um submódulo parece errado, assim como o anexo de muitos arquivos para os quais você deseja um histórico completo.
Portanto, a natureza distribuída do git é realmente o que está me impedindo de adotá-lo. Eu realmente não me importo com a distribuição, só quero as ramificações baratas e os poderosos recursos de mesclagem. Como suponho que 99,9% dos usuários do git usem, usaremos um repositório central abençoado e vazio.
Não sei ao certo por que cada usuário precisa ter um histórico local completo ao usar o git? Se o fluxo de trabalho não for descentralizado, o que esses dados estão fazendo nos discos dos usuários? Eu sei que nas versões recentes do git você pode usar um clone superficial com apenas histórico recente. Minha pergunta é: é viável fazer isso como o modo padrão de operação para uma equipe inteira? O git pode ser configurado para ser sempre superficial para que você possa ter um histórico completo apenas centralmente, mas por padrão os usuários têm apenas 1000 rotações do histórico? A opção para isso, é claro, seria converter apenas 1000 rotações em git e manter o repositório svn para arqueologia. Nesse cenário, no entanto, encontraríamos o mesmo problema novamente após as próximas milhares de revisões nos documentos de teste.
- O que é uma boa prática recomendada para usar git com grandes repos que contém muitos arquivos binários que você não quer que a história de? A maioria das melhores práticas e tutoriais parece evitar esse caso. Eles resolvem o problema de poucos binários enormes ou propõem a remoção total dos binários.
- A clonagem superficial é utilizável como um modo normal de operação ou é um "hack"?
- Os sub-módulos podem ser usados para código em que você tem uma dependência estreita entre a revisão principal de origem e a revisão do sub-módulo (como dependências binárias em tempo de compilação ou um conjunto de testes de unidade)?
- Qual o tamanho "grande demais" para um repositório git (local)? Devemos evitar a troca se conseguirmos reduzir para 4 GB? 2GB?