PDFs no git, reduza o tamanho

6

Eu tenho um repositório git com muitos arquivos PDF. O repositório git está aumentando tanto em tamanho que é muito complicado clonar o repositório para um novo host quando a conexão com a Internet é limitada ...

Eu usei git gc && git gc --aggressive , o que me custou muita memória RAM e não fiz nada de útil. O tamanho do repositório ainda é praticamente o mesmo.

Ouvi falar sobre git annex , mas não sei se é o jeito certo, porque não quero puxar toda vez que preciso de um dos PDFs. É claro que posso fazer isso e deixar todos os arquivos no meu laptop, mas quero clonar tudo de uma vez e não dois repos diferentes)

Existe uma boa maneira de reduzir o tamanho e ainda ter os PDFs utilizáveis (além de reduzir o tamanho dos PDFs - há alguns no meu repositório com mais de 100MB de tamanho)

    
por reox 13.09.2011 / 07:47

1 resposta

10

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.

    
por 13.09.2011 / 08:08

Tags