Versão curta: significa o que diz e, se você deixar terminar, tudo ficará bem.
Durante a maioria das operações que podem aumentar potencialmente o número de objetos soltos (descompactados) no repositório (incluindo pushes), o Git chama git gc --auto
. Se houver objetos soltos suficientes (por padrão, pelo menos 6700), ele será chamado git repack -d -l
para compactá-los. Se houver muitos pacotes separados, ele também será reembalado em um.
Um pacote é um arquivo único compactado em delta, contendo um grande número de objetos. É mais eficiente armazenar objetos em pacotes, mas leva tempo para compactar (compactar) objetos, para que o Git crie objetos soltos inicialmente e os empacote em lotes de vez em quando, por meio da invocação automática de git gc --auto
.
Se você deixar o Git terminar de reembalar, isso não acontecerá novamente por um tempo. De fato, pode demorar um pouco, especialmente se você tiver muitos objetos binários grandes, mas se estiver sendo acionado, é um sinal de que provavelmente reduzirá drasticamente a quantidade de espaço em disco ocupado pelo repositório. Se você realmente não quer que isso aconteça, você pode alterar o parâmetro de configuração gc.auto
. Se você aumentar para algo muito maior que 6700, isso acontecerá com menos frequência, mas levará mais tempo. Se você diminuí-lo, ainda terá que fazer sua reembalagem atual, mas subsequentemente isso acontecerá com mais frequência e terminará mais rapidamente. Se você defini-lo como 0, desabilitará a reembalagem automática.
Consulte man git-gc
(abaixo --auto
) e man git-config
(abaixo gc.auto
) para obter mais informações.
fatal: Out of memory, malloc failed (tried to allocate 79610689 bytes) error: failed to run repack
- é o que recebo por colocar toda a nossa base de código em um repositório git. Acho que eu vou matar aplicativos e força repack "manualmente"Embora o Jefroni esteja certo de que às vezes o empacotamento automático precisa de tempo para ser concluído, se a mensagem do empacotamento automático persistir por vários dias, conforme a descrição do OP, há uma boa chance de que a limpeza do git esteja perdendo objetos pendentes, conforme descrito nesta pergunta .
Para ver se os objetos pendentes estão acionando mensagens em andamento sobre empacotamento automático, tente executar
git fsck
. Se você receber uma longa lista de confirmações pendentes, poderá limpá-las comgit gc --prune=now
Normalmente, eu tenho que executar isso no meu repositório a cada 2-3 meses, quando a mensagem de empacotamento automático não desaparece após um único puxão.
fonte
git pull
, durante vários dias, e defsck
fato mostrava uma tonelada de confirmações pendentes.Para desativar para um projeto:
Para desativar globalmente:
fonte
O Git está executando o git-repack, que empacota muitos objetos (= arquivos, confirmações e árvores) em um arquivo de pacote. O Git faz isso algumas vezes, quando uma heurística diz que pode haver espaço economizado (um arquivo de pacote contém deltas de objetos compactados, enquanto cada arquivo no diretório de objetos / contém o conteúdo completo do arquivo)
fonte
Felizmente, essa
git gc --auto
etapa é agora (git 2.0.1, 25 de junho de 2014) mais eficiente.Veja commit 62aad18 de Nguyễn Thái Ngọc Duy (
pclouds
)gc --auto
: não bloqueie refs em segundo planoE o Git 2.22 (Q2 2019) otimiza ainda mais
git gc
.fonte