Minha base atual tem um tamanho total de aprox. 200MB.
Mas minha pasta .git tem um tamanho incrível de 5 GB (!). Como eu envio meu trabalho para um servidor externo, não preciso de nenhum histórico local grande ...
Como reduzir a pasta .git para liberar espaço no meu notebook? Posso excluir todas as alterações anteriores a 30 dias?
Muito obrigado por qualquer ajuda :)
git count-objects -v
?Respostas:
você não deve excluir todas as alterações anteriores a 30 dias (acho que é possível explorar o git, mas realmente não é recomendado).
você pode chamar
git gc --aggressive --prune
, o que executará a coleta de lixo em seu repositório e removerá objetos antigos. você tem muitos arquivos binários (arquivos, imagens, executáveis) que mudam frequentemente? essas geralmente levam a enormes pastas .git (lembre-se, o git armazena instantâneos para cada revisão e os arquivos binários são compactados mal)fonte
git gc --aggressive
é considerado uma má prática. É melhor usargit repack -a -d --depth=250 --window=250
.git gc --aggressive
chama reembalar com um tamanho de janela de 250 (consulte a página de manual) e uma profundidade de 250 (consulte o código-fonte). --aggressive adicionalmente adiciona o-f
switch, para jogar fora e refazer todas as operações delta anteriores (como também mencionado no link)git gc --aggressive --prune
reduziu para 19 MB.--prune
também não é necessário, pois se tornou o padrão desdev1.5.5-rc0
(commit 25ee973 , março de 2008).Aqui está o que o criador do git Linus tem a dizer sobre como reduzir seu repositório git:
fonte: http://gcc.gnu.org/ml/gcc/2007-12/msg00165.html
Isso eliminará os dados binários que ficam órfãos no meu repositório? O "git repack" não se livra das imagens ou dos dados binários que você verificou no seu repositório e os excluiu. Para excluir esse tipo de dados permanentemente do seu repositório, você deve reescrever seu histórico. Um exemplo comum disso é quando você acidentalmente verifica suas senhas no git. Você pode voltar e excluir alguns arquivos, mas precisará reescrever seu histórico a partir de agora até agora e depois forçar o push e o novo repo à sua origem.
fonte
fatal: Out of memory, malloc failed (tried to allocate 39763130 bytes)
repack
localmente, fazendo um commit e um push, o psiquiatra também será remoto?Eu tentei isso, mas meu repositório ainda era muito grande. O problema foi que eu acidentalmente verifiquei alguns arquivos grandes gerados. Após algumas pesquisas, encontrei um ótimo tutorial que facilita a exclusão dos grandes arquivos gerados. Este tutorial me permitiu reduzir meu repositório de 60 MB para <1 MB.
fonte
5GB vs 200MB é meio estranho. Tente correr
git gc
.Mas não, a menos que você divida seu repositório em módulos, não poderá diminuir o tamanho do
.git
diretório.Cada clone de um repositório git é um repositório completo que pode atuar como um servidor. Esse é o princípio básico do controle de versão distribuído.
fonte
Estou usando o git mais como mecanismo de sincronização do que no histórico de versões. Portanto, minha solução para esse problema foi garantir que todas as minhas fontes atuais estejam em um estado satisfatório e excluir apenas .git e reinicializar os repositórios. Problema em espaço em disco resolvido. :-) História perdida :-( Faço isso porque meu repositório está em uma pequena chave USB. Não quero nem preciso de toda a minha história. Se eu tivesse um método para apenas truncar a história, usaria isso.
Se eu estivesse interessado em manter meu histórico, arquivaria o repositório atual. Em algum momento depois, eu poderia clonar o repositório original, copiar todas as alterações do novo repositório (suponha que eu não tenha feito muito (nenhum) renomear ou excluir). E faça um grande commit que represente todas as alterações feitas no novo repositório como um único commit no antigo repositório. É possível mesclar as histórias? Talvez se eu usasse um ramo e excluísse os objetos que não precisava. (Eu não sei o suficiente sobre os internos do git para começar a brincar assim).
fonte
Tentei acima dos métodos, nada funcionou no meu caso (onde acidentalmente matei o processo git durante o git push), então finalmente tive que excluir o repositório e cloná-lo novamente e agora a pasta .git é de tamanho normal.
fonte