Com que frequência deve utilizar o git-gc?
com que frequência deve utilizar o git-gc?
a página de manualdiz simplesmente:
Os utilizadores são encorajados a executar esta tarefa numa base regular dentro de 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 para descobrir se é hora de gc?
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.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.
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."
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.
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
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. Masgc output
é não é muito interessante.
Você pode mantê-lo em primeiro plano mudandogc.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 daemonizedgc --auto
e imprime-o da próxima vezEnquanto 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 decmd_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 salvastderr
a$GIT_DIR/gc.log
.
Apósgc --auto
não será executado egc.log
impresso até o utilizador removergc.log
.
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
Uso quando faço um grande commit, sobretudo quando removo mais ficheiros do repositório.. depois, os commits são mais rápidos