Reduzir o tamanho do repositório git


290

Tentei procurar um bom tutorial sobre como reduzir o tamanho do repositório, mas não o encontrei. Como reduzo meu tamanho de repositório ... é de cerca de 10 MB, mas o Heroku permite apenas 50 MB e não estou nem perto de terminar o desenvolvimento do meu aplicativo.

Adicionei os suspeitos do costume (log, fornecedor, documento etc) ao .gitignore. Embora eu apenas tenha adicionado .gitignore recentemente.

Alguma sugestão?


1
Acabei de fazer e reduziu para 2,2 mb ... muito obrigado! Embora isso não pareça reduzir o tamanho do repositório em Heroku..hmm
Enviado-hil

11
Empurre usando --force. Ele vai substituir o conteúdo, mesmo se não houve alteração (sem novos commits, etc.)
Marcin Gil

1
@ MarcinGil - Abaixo, o VonC afirma que você precisa de acesso ao servidor para limpar o servidor remoto (se eu estiver analisando corretamente).
jww 16/06

1
Apenas um comentário para ajudar outros leitores, se eles não souberem o que adicionar .gitignore, existe um bom serviço no gitignore.io que o ajudará a configurar um bom com .gitignorebase no seu ambiente de desenvolvimento.
precisa saber é o seguinte

Respostas:


351

git gc --aggressiveé uma maneira de forçar o processo de remoção (para ter certeza git gc --aggressive --prune=now:). Você tem outros comandos para limpar o repositório também. Não se esqueça, porém, às vezes git gcsozinho, pode aumentar o tamanho do repositório !

Também pode ser usado após a filter-branch, para marcar alguns diretórios a serem removidos do histórico (com mais ganho de espaço); veja aqui . Mas isso significa que ninguém está retirando seu repositório público. filter-branchpode manter as referências de backup.git/refs/original , para que o diretório também possa ser limpo.

Finalmente, como mencionado neste comentário e nesta pergunta ; limpar o reflog pode ajudar:

git reflog expire --all --expire=now
git gc --prune=now --aggressive

Uma solução ainda mais completa e possivelmente perigosa é remover objetos não utilizados de um repositório git


Em outro cenário, consulte também stackoverflow.com/questions/1029969/…
VonC

1
Nota para si mesmo: não esqueça de ramificações remotas: stackoverflow.com/questions/11255802/…
VonC 29/12/12

1
Nota ao auto: não se esqueça etiquetas remotos
saiyancoder

1
Além das referências remotas, o reflog é outra coisa que pode fazer com que as referências que você está tentando remover sejam mantidas. stackoverflow.com/q/27489761/1072626
vossad01

1
@ jww Confirmo que esta é puramente uma operação local. Não tem influência no tamanho do repositório remoto. Você precisaria de um acesso direto ao servidor desse repositório remoto para fazer o mesmo.
VonC

94

Obrigado por suas respostas. Aqui está o que eu fiz:

git gc
git gc --aggressive
git prune

Isso parecia ter feito o truque. Comecei com cerca de 10,5 MB e agora é pouco mais de 980 KB.


8
pruneé sempre executado por gc(com 2 semanas atrás, padrão).
Cas

117
U pode executar todos os 3 com ameixa seca até agora usandogit gc --aggressive --prune=now
rahul286

1
Mas, quando eu excluo o repositório e o clono novamente, o tamanho ainda é grande. Como você lida com isso?
Cwtuan

2

No meu caso, enviei vários arquivos grandes (> 100Mb) e depois os removi. Mas eles ainda estavam na história do meu repo, então eu tive que removê-los também.

Qual foi o truque:

bfg -b 100M  # To remove all blobs from history, whose size is superior to 100Mb
git reflog expire --expire=now --all
git gc --prune=now --aggressive

Então, você precisa pressionar a sua filial:

git push origin <your_branch_name> --force

O bfg é uma ferramenta que pode ser instalada no Linux e no macOS usando o brew:

brew install bfg
Ao utilizar nosso site, você reconhece que leu e compreendeu nossa Política de Cookies e nossa Política de Privacidade.
Licensed under cc by-sa 3.0 with attribution required.