Nem o Git nem o Mercurial lidam muito bem com arquivos binários grandes. Ambos fazem a suposição de que os arquivos que estão sendo rastreados são relativamente pequenos e fáceis de serem diferenciados, mas os arquivos PDF não são nenhum deles. Se você já executou git gc
, seu repositório não ficará muito menor do que já é.
Se você não quiser uma solução de terceiros, você pode atenuar isso com o Git usando submódulos. Se fizer sentido, você pode dividir os diferentes arquivos em seu repositório em submódulos e cloná-los separadamente. Dessa forma, você pode clonar o projeto mestre para obter todas as referências de submódulo e, em seguida, clonar cada um dos submódulos conforme necessário.
No entanto, como você suspeita, o git anexo é provavelmente a melhor solução. É um repositório de artefatos, algo como bfiles para o Mercurial. Esses repositórios de artefatos devem ser usados com arquivos grandes, binários e não-diffable. Eles gerenciam a recuperação dos artefatos; Git e Mercurial são responsáveis apenas por manter referências. Desta forma, quando você clona com o Git, você só precisa clonar as referências, e a recuperação de artefatos é uma etapa separada executada conforme necessário.
Se você seguir uma dessas rotas, você pode querer considerar reescrever histórico para remover todos os objetos anteriores e movê-los para submódulos ou git annex. Se não o fizer, o seu repositório será sempre tão grande quanto é agora.
Como observação, o motivo git gc
não reduziu o tamanho do repositório porque a coleta de lixo do Git apenas remove objetos não referenciados do repositório e compacta objetos soltos nos arquivos do pacote. Como seus PDFs são todos referenciados e não são bem compactados nos arquivos do pacote, o repositório não ficaria muito menor.