Close

Git gc

O comando git gc é um comando de manutenção do repositório. O "gc" é a abreviação para coleta de lixo em inglês. Executar o git gc é literalmente dizer ao Git para limpar a bagunça que ele fez no repositório atual. A coleta de lixo é um conceito que se origina de linguagens de programação interpretadas que fazem alocação dinâmica de memória. A coleta de lixo em linguagens interpretadas é usada para recuperar a memória que se tornou inacessível para o programa em execução.

Os repositórios Git acumulam vários tipos de lixo. Um tipo de lixo do Git são os commits órfãos ou inacessíveis. Os commits do Git podem ficar inacessíveis ao executar comandos que alteram o histórico, como git resets ou git rebase. Em um esforço para preservar o histórico e evitar a perda de dados, o Git não vai excluir os commits desanexados. Um commit desanexado ainda pode ser verificado, selecionado e examinado por meio do git log.

Além da limpeza de commit desanexada, o git gc também vai executar a compactação em objetos Git armazenados, liberando espaço precioso em disco. Quando o Git identifica um grupo de objetos semelhantes, ele os comprime em um "pacote". Os pacotes são como arquivos zip de objetos Git e ficam no ./git/objects/pack diretório dentro de um repositório.


O que o git gc faz de verdade?


Antes da execução, o git gc verifica vários valores do git config primeiro. Esses valores vão ajudar a esclarecer o resto da responsabilidade do git gc.

configuração git gc

gc.reflogExpire

Uma variável opcional que tem como padrão 90 dias. Ele é usado para definir por quanto tempo os registros em um reflog de branches devem ser preservados.

gc.reflogExpireUnreachable

Uma variável opcional que tem como padrão 30 dias. Ela é usada para definir por quanto tempo os registros de reflog inacessíveis devem ser preservados.

gc.aggressiveWindow
bancos de dados
Material relacionado

Como mover um Repositório do Git completo

Logotipo do Bitbucket
VER SOLUÇÃO

Aprenda a usar o Git com o Bitbucket Cloud

Uma variável opcional que tem como padrão 250. Ele controla quanto tempo é gasto na fase de compactação delta do empacotamento de objetos quando o git gc é executado com a opção --aggressive.

gc.aggressiveDepth

Uma variável opcional que tem como padrão 50. Ele controla a profundidade da compactação que o git-repack usa durante uma execução git gc --aggressive

gc.pruneExpire

Variável opcional que tem como padrão "após 2 semanas". Ele define por quanto tempo um objeto inacessível vai ser preservado antes da remoção

gc.worktreePruneExpire

Variável opcional que tem como padrão "após 3 meses". Ele define por quanto tempo uma árvore de trabalho obsoleta vai ser preservada antes de ser excluída.

execução git gc

Nos bastidores, o git gc de fato executa um pacote de outros subcomandos internos como git prune, git repack, git pack e git rerere. A responsabilidade de alto nível desses comandos é identificar quaisquer objetos Git que estejam fora dos níveis de limite definidos na configuração git gc. Depois de identificados, esses objetos são compactados ou removidos de acordo.

Práticas recomendadas e perguntas frequentes do git gc


A coleta de lixo é executada automaticamente em vários comandos usados com frequência:

A frequência com que o git gc deve ser executado manualmente corresponde ao nível de atividade de um repositório. Um repositório com um único desenvolvedor colaborador vai precisar executar o git gc com muito menos frequência do que um repositório multiusuário atualizado com frequência.

git gc x git prune


git gc é um comando pai e git prune é filho. O git gc faz o acionamento interno do git prune. O git prune é usado para remover objetos Git que foram considerados inacessíveis pela configuração git gc. Saiba mais sobre o git prune.

O que é git gc aggressive?


O git gc pode ser invocado com a opção de linha de comando --aggressive. A opção --aggressive faz com que o git gc gaste mais tempo em seu esforço de otimização. Assim o git gc é executado mais lentamente, mas você vai economizar mais espaço em disco após a conclusão. Os efeitos de --aggressive são persistentes e só precisam ser executados após um grande volume de alterações em um repositório.

O que é git gc auto?


A variante do comando git gc --auto primeiro verifica se alguma manutenção é necessária no repositório antes da execução. Se ela achar que o serviço de limpeza não é necessário, nenhum trabalho é feito. Alguns comandos do Git executam implicitamente git gc --auto após a execução para limpar quaisquer objetos soltos que eles criaram.

Antes da execução, o git gc --auto vai verificar a configuração do git para valores de limite em objetos soltos e tamanho de compactação da embalagem. Esses valores podem ser definidos com git config. Se o repositório ultrapassar qualquer um dos limites de manutenção, o git gc --auto vai ser executado.

Primeiros passos com o git gc


Você provavelmente já está usando o git gc sem perceber. Conforme discutido na seção de práticas recomendadas, ele é invocado automaticamente por meio de comandos usados com frequência. Se você quiser fazer a invocação manualmente, basta executar o git gc e você vai ver uma saída indicando o trabalho que ele realizou.


Compartilhar este artigo
Próximo tópico

Leitura recomendada

Marque esses recursos para aprender sobre os tipos de equipes de DevOps ou para obter atualizações contínuas sobre DevOps na Atlassian.

Pessoas colaborando usando uma parede cheia de ferramentas

Blog do Bitbucket

Ilustração do DevOps

Caminho de aprendizagem de DevOps

Demonstrações de funções no Demo Den com parceiros da Atlassian

Como o Bitbucket Cloud funciona com o Atlassian Open DevOps

Inscreva-se para receber a newsletter de DevOps

Thank you for signing up