Com que frequência deve utilizar o git-gc?

Author: Andrew Grimm, 2008-09-11

9 answers

Depende principalmente de quanto o repositório é usado. Com um usuário fazendo check-in uma vez por dia e uma operação de branch/merge/etc Uma vez por semana, você provavelmente não precisa executá-lo mais do que uma vez por ano.

Com várias dezenas de desenvolvedores trabalhando em várias dezenas de projetos, cada um verificando 2-3 vezes por dia, você pode querer executá-lo todas as noites. No entanto, não faz mal executá-lo com mais frequência do que o necessário. O que eu faria era executá-lo agora, daqui a uma semana, fazer uma medição. de Utilização do disco, executá-lo novamente, e medir a utilização do disco novamente. Se cair 5% em tamanho, então execute-o uma vez por semana. Se cair mais, então execute - o mais frequentemente. Se cair menos, então execute-o menos frequentemente.
 178
Author: Adam Davis, 2012-08-29 04:31:33
Note que a desvantagem de recolher lixo no seu repositório é que, bem, o lixo é recolhido. Como todos nós sabemos como usuários de computador, arquivos que consideramos lixo agora pode vir a ser muito valioso três dias no futuro. O fato de que git mantém a maioria de seus detritos ao redor salvou meu bacon várias vezes – navegando todos os commits Pendurados, eu recuperei muito trabalho que eu tinha acidentalmente enlatado. Por isso, não sejas uma aberração com as limpezas em privado. clone. Não há necessidade disso.

OTOH, o valor da recuperabilidade dos dados é questionável para os acordos de recompra utilizados principalmente como comandos, por exemplo. o lugar onde todos os devs empurram e / ou puxaram. Lá, pode ser sensato começar uma corrida GC e um reembalamento com frequência.

 95
Author: Aristotle Pagaltzis, 2008-09-17 20:41:39

As versões recentes do git executam o gc automaticamente quando necessário, por isso não deve ter de fazer nada. Ver a secção de Opções de man git-gc(1): "alguns comandos do git executam o git gc -- auto após a realização de operações que poderiam criar muitos objectos soltos."

 30
Author: mrowe, 2008-09-15 21:23:00

Se estiver a utilizar Git-Gui, diz-te quando deves preocupar-te.

This repository currently has approximately 1500 loose objects.

O seguinte comando irá trazer um número semelhante:

$ git count-objects

Excepto que, a partir da sua fonte, o git-gui fará a matemática por si só, na verdade contando algo na pasta .git/objects e provavelmente traz uma aproximação (não sei tcl para ler correctamente isso!).

Em qualquer caso, parece dar o aviso baseado num número arbitrário Cerca de 300 objectos soltos.

 17
Author: cregox, 2017-05-23 12:34:21
Deixa-o num trabalho de cron que corre todas as noites.) quando estás a dormir.
 8
Author: Pat Notz, 2008-09-11 04:00:27

Eu uso o git gc depois de fazer uma grande checkout, e tenho um monte de objeto novo. pode poupar espaço. Por exemplo, se você verificar um grande projecto SVN usando o git-svn, e fizer um git gc, você normalmente poupa muito espaço

 8
Author: Rory, 2008-09-15 21:16:46

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

Consulte cometer 4c4ac4d e cometer 9f673f9 (Nguyễn Thái Ngọc Duy, aka pclouds):

gc --auto leva tempo e pode bloquear o usuário temporariamente (mas não menos irritantemente).
Faça - o correr em segundo plano em sistemas que o suportam.
A única coisa perdida com a execução em segundo plano são as impressões. Mas gc output é não é muito interessante.
Você pode mantê-lo em primeiro plano mudando gc.autodetach.


Desde a versão 2.0, houve um bug no entanto: o git 2.7 (Q4 2015) irá certificar-se de não perder a mensagem de erro.
Ver commit 329e6e8 (19 Sep 2015) por Nguyễn Thái ng NGC Duy (pclouds).
(fundido por Junio C Hamano -- gitster -- em commit 076c827 , 15 PTU 2015)

gc: gravar o registo do daemonized gc --auto e imprime-o da próxima vez

Enquanto commit 9f673f9 (gc: a opção de configuração para executar --auto em segundo plano-2014-02-08) ajuda a reduzir algumas queixas sobre' gc --auto ' monopolizar o terminal, cria outro conjunto de problemas.

O último deste conjunto é, como resultado da daemonização, stderr está fechado e todos os avisos são perdidos. Este aviso no final de cmd_gc() é particularmente importante porque diz ao Utilizador como evitar "gc --auto" correr repetidamente.
Como o stderr está fechado, o Usuário não sabe, naturalmente se queixam de 'gc --auto' desperdiçar CPU.

Daemonizado gc agora salva stderr a $GIT_DIR/gc.log.
Após gc --auto não será executado e gc.log impresso até o utilizador remover gc.log
.

 7
Author: VonC, 2017-12-18 14:49:13

Esta citação é retirada de; controlo de versões com o Git

O Git executa automaticamente a colecção de lixo:

• Se houver demasiados objectos soltos no repositório

* Quando um push para um repositório remoto acontece

* após alguns comandos que podem introduzir muitos objectos soltos

• Quando alguns comandos como o Git reflog expiram explicitamente, solicite-o

E finalmente, a recolha do lixo ocorre quando o solicita explicitamente usando o comando git gc. Mas quando será isso? Não há sólido resposta a esta pergunta, mas há alguns bons conselhos e melhores pratica.

Você deve considerar executar git gc manualmente em alguns situações:

• Se tiver acabado de completar um ramo de filtragem git . Recordar filter-branch reescreve muitos commits, introduz novos e deixa os antigos em um árbitro que deve ser removido quando você está satisfeito com os resultados. Todos aqueles objetos mortos (que já não são referenciado desde que você acabou de remover o árbitro apontando para eles) deve ser removido através da coleta de lixo.

* após alguns comandos que podem introduzir muitos objectos soltos. Presente pode ser um grande esforço de ajuste de base, por exemplo.

E do outro lado, quando deves ter cuidado com a recolha do lixo?

• Se houver árbitros órfãos que possam querer recuperar

Contexto do git rerere e você não precisa salvar o resoluções para sempre

• no contexto de apenas marcas e ramos serem suficientes para causar Git para manter uma persistência permanentemente

• no contexto dos 'FETCH_HEAD '' retrievals (URL-direct retrievals via git fetch) porque eles estão imediatamente sujeitos à coleta de lixo

• no contexto de apenas marcas e ramos serem suficientes para causar Git para manter uma persistência permanentemente

Em o contexto das recuperações do 'FETCH_HEAD' (URL-direct retrievals via git fetch) porque eles estão imediatamente sujeitos à coleta de lixo

 6
Author: Teoman shipahi, 2015-05-14 21:20:03

Uso quando faço um grande commit, sobretudo quando removo mais ficheiros do repositório.. depois, os commits são mais rápidos

 4
Author: ghiboz, 2014-04-27 22:53:34