Pergunta

Com que frequência você deve usar o git-gc?

O página de manual simplesmente diz:

Os usuários são incentivados a executar esta tarefa regularmente em cada repositório para manter uma boa utilização do espaço em disco e um bom desempenho operacional.

Existem alguns comandos para obter algumas contagens de objetos e descobrir se é hora de fazer o gc?

Foi útil?

Solução

Depende principalmente de quanto o repositório é usado.Com um usuário fazendo check-in uma vez por dia e uma operação de ramificação/mesclagem/etc uma vez por semana, você provavelmente não precisará executá-la mais de uma vez por ano.

Com várias dezenas de desenvolvedores trabalhando em dezenas de projetos, cada um fazendo check-in 2 a 3 vezes por dia, você pode querer executá-lo todas as noites.

No entanto, não fará mal executá-lo com mais frequência do que o necessário.

O que eu faria é executá-lo agora e, daqui a uma semana, medir a utilização do disco, executá-lo novamente e medir a utilização do disco novamente.Se cair 5% de tamanho, execute-o uma vez por semana.Se cair mais, execute-o com mais frequência.Se cair menos, execute-o com menos frequência.

Outras dicas

Observe que a desvantagem da coleta de lixo em seu repositório é que, bem, o lixo é coletado.Como todos nós sabemos, como usuários de computador, os arquivos que consideramos lixo agora podem se tornar muito valiosos daqui a três dias.O fato de o git manter a maior parte de seus detritos salvou meu bacon várias vezes – navegando em todos os commits pendentes, recuperei muito trabalho que havia acidentalmente enlatado.

Portanto, não seja muito maníaco por limpeza em seus clones particulares.Há pouca necessidade disso.

OTOH, o valor da recuperabilidade de dados é questionável para repositórios usados ​​principalmente como remotos, por exemplo.o lugar para onde todos os desenvolvedores empurram e/ou puxam.Nesse caso, pode ser sensato iniciar uma execução de GC e uma reembalagem com frequência.

Versões recentes do git executam gc automaticamente quando necessário, então você não precisa fazer nada.Consulte a seção Opções de cara git-gc(1):"Alguns comandos git executam git gc --auto após realizar operações que podem criar muitos objetos soltos."

Se você estiver usando Git-Gui, isto diz lhe quando você deve se preocupar:

This repository currently has approximately 1500 loose objects.

O comando a seguir trará um número semelhante:

$ git count-objects

Exceto, da sua fonte, o git-gui fará as contas sozinho, na verdade contando algo em .git/objects pasta e provavelmente traz uma aproximação (não sei tcl para ler isso corretamente!).

Em qualquer caso, é parece para dar o aviso com base em um número arbitrário em volta 300 objetos soltos.

Coloque-o em um cron job que é executado todas as noites (tarde?) Quando você está dormindo.

Eu uso git gc depois de fazer uma grande finalização de compra e tenho muitos objetos novos.pode economizar espaço.Por exemplo.se você fizer check-out de um grande projeto SVN usando git-svn e fizer um git gc, normalmente economizará muito espaço

Você pode fazer isso sem qualquer interrupção, com a nova configuração (Git 2.0 Q2 2014) gc.autodetach.

Ver cometer 4c4ac4d e cometer 9f673f9 (Nguyễn Thái Ngọc Duy, também conhecido como pclouds):

gc --auto leva tempo e pode bloquear o usuário temporariamente (mas não menos irritante).
Faça-o rodar em segundo plano em sistemas que o suportem.
A única coisa que se perde com a execução em segundo plano são as impressões.Mas gc output não é realmente interessante.
Você pode mantê-lo em primeiro plano alterando gc.autodetach.


Desde a versão 2.0, houve um bug:git 2.7 (quarto trimestre de 2015) garantirá não perca a mensagem de erro.
Ver confirmar 329e6e8 (19 de setembro de 2015) por Nguyễn Thái Ngọc Duy (pclouds).
(Mesclado por Júnio C Hamano-- gitster -- em confirmar 076c827, 15 de outubro de 2015)

gc:salvar log do daemonizado gc --auto e imprima na próxima vez

Enquanto cometer 9f673f9 (gc:opção de configuração para execução --auto em segundo plano - 08/02/2014) ajuda a reduzir algumas reclamações sobre 'gc --auto' monopolizando o terminal, isso cria outro conjunto de problemas.

O mais recente neste conjunto é, como resultado da daemonização, stderr é fechado e todos os avisos são perdidos.Este aviso no final do cmd_gc() é particularmente importante porque informa ao usuário como evitar "gc --auto"executando repetidamente.
Como o stderr está fechado, o usuário não sabe, naturalmente reclama de 'gc --auto'desperdiçando CPU.

Daemonizado gc agora salva stderr para $GIT_DIR/gc.log.
Seguindo gc --auto não vai correr e gc.log impresso até que o usuário remova gc.log
.

Esta citação foi retirada de;Controle de versão com Git

Git executa coleta de lixo automaticamente:

• Se houver muitos objetos soltos no repositório

• Quando acontece um push para um repositório remoto

• Após alguns comandos que podem introduzir muitos objetos soltos

• Quando alguns comandos como git reflog expirem solicitem explicitamente

E, finalmente, a coleta de lixo ocorre quando você a solicita explicitamente Usando o comando git gc.Mas quando deveria ser isso?Não há sólido resposta para esta pergunta, mas há alguns bons conselhos e melhor prática.

Você deve considerar a execução do git gc manualmente em alguns Situações:

• Se você acabou de concluir um git filter-branch .Lembre-se que filter-branch reescreve muitos commits, introduz novos e sai os antigos em uma ref que deve ser removido quando você estiver satisfeito com os resultados.Todos aqueles objetos mortos (que não são mais) referenciado já que você acabou de remover a ref apontando para eles) deve ser removido via coleta de lixo.

• Após alguns comandos que possam introduzir muitos objetos soltos.Este pode ser um grande esforço de rebase, por exemplo.

E por outro lado, Quando desconfiar da coleta de lixo?

• Se houver árbitros órfãos que você queira recuperar

• No contexto do git rere e você não precisa salvar o resoluções para sempre

• No contexto de apenas tags e ramificações serem suficientes para causar Git para manter uma confirmação permanentemente

• No contexto de recuperações de FETCH_HEAD (recuperações diretas de URL via git fetch ) porque estão imediatamente sujeitos à coleta de lixo

• No contexto de apenas tags e ramificações serem suficientes para causar Git para manter uma confirmação permanentemente

• No contexto de recuperações de FETCH_HEAD (recuperações diretas de URL via git fetch ) porque estão imediatamente sujeitos à coleta de lixo

Eu uso quando faço um grande commit, principalmente quando removo mais arquivos do repositório.depois, os commits são mais rápidos

Licenciado em: CC-BY-SA com atribuição
Não afiliado a StackOverflow
scroll top