Português (Brasil) ▾
Localized versions of git-gc manual
  1. English
  2. Français
  3. Português (Brasil)
  4. українська мова
  5. 简体中文
Topics ▾ Latest version ▾ git-gc last updated in 2.52.0
Changes in the git-gc manual
  1. 2.52.0 2025年11月17日
  2. 2.49.1 → 2.51.2 no changes
  3. 2.49.0 2025年03月14日
  4. 2.47.1 → 2.48.2 no changes
  5. 2.47.0 2024年10月06日
  6. 2.43.1 → 2.46.4 no changes
  7. 2.43.0 2023年11月20日
  8. 2.42.1 → 2.42.4 no changes
  9. 2.42.0 2023年08月21日
  10. 2.41.1 → 2.41.3 no changes
  11. 2.41.0 2023年06月01日
  12. 2.38.1 → 2.40.4 no changes
  13. 2.38.0 2022年10月02日
  14. 2.37.1 → 2.37.7 no changes
  15. 2.37.0 2022年06月27日
  16. 2.31.1 → 2.36.6 no changes
  17. 2.31.0 2021年03月15日
  18. 2.30.1 → 2.30.9 no changes
  19. 2.30.0 2020年12月27日
  20. 2.24.1 → 2.29.3 no changes
  21. 2.24.0 2019年11月04日
  22. 2.22.1 → 2.23.4 no changes
  23. 2.22.0 2019年06月07日
  24. 2.21.1 → 2.21.4 no changes
  25. 2.21.0 2019年02月24日
  26. 2.20.1 → 2.20.5 no changes
  27. 2.20.0 2018年12月09日
  28. 2.19.1 → 2.19.6 no changes
  29. 2.19.0 2018年09月10日
  30. 2.18.1 → 2.18.5 no changes
  31. 2.18.0 2018年06月21日
  32. 2.13.7 → 2.17.6 no changes
  33. 2.12.5 2017年09月22日
  34. 2.11.4 2017年09月22日
  35. 2.10.5 no changes
  36. 2.9.5 2017年07月30日
  37. 2.7.6 → 2.8.6 no changes
  38. 2.6.7 2017年05月05日
  39. 2.5.6 no changes
  40. 2.4.12 2017年05月05日
  41. 2.1.4 → 2.3.10 no changes
  42. 2.0.5 2014年12月17日

Check your version of git by running

git --version

NOME

git-gc - Limpa os arquivos desnecessários e otimiza o repositório local

RESUMO

git gc [--aggressive] [--auto] [--[no-]detach] [--quiet] [--prune=<date> | --no-prune] [--force] [--keep-largest-pack]

DESCRIÇÃO

Executa várias tarefas de limpeza no repositório atual, como a compactação dos arquivos das revisões (para reduzir o espaço em disco e aumentar o desempenho), a remoção dos objetos inacessíveis que podem ter sido criados a partir de invocações anteriores ao git add, pacotes refs, a remoção do "reflog", metadados reerere ou árvores de trabalho obsoletas. Pode também atualizar os índices auxiliares, como o grafo do commit.

Quando as operações porcelana tradicionais que criam os objetos são executadas, elas verificam se o repositório cresceu substancialmente desde a última manutenção e se for o caso, executam o o comando git gc automaticamente. Consulte gc.auto abaixo para saber como desativar este comportamento.

A execução manual do comando git gc só é necessária ao adicionar objetos em um repositório quando não executar regularmente estes comandos porcelana, para executar uma otimização única do repositório ou por exemplo, para limpar uma importação em massa que esteja abaixo do ideal. Consulte a seção "OTIMIZAÇÃO DE PACOTE" no git-fast-import[1] para obter mais detalhes sobre o caso de importação.

OPÇÕES

--aggressive

Normalmente, o comando git gc é executado muito rapidamente, proporcionando boa utilização do espaço em disco e bom desempenho. Essa opção fará com que o comando git gc otimize o repositório de forma mais agressiva, à custa de levar muito mais tempo. Os efeitos dessa otimização são, em sua maioria, persistentes. Consulte a seção "AGRESSIVO" abaixo para obter mais detalhes.

--auto

Com esta opção, o comando git gc verifica se é necessário alguma limpeza; caso contrário, sai sem fazer nada.

Consulte a opção gc.auto na seção "CONFIGURAÇÃO" abaixo para saber como essa heurística funciona.

Caso seja excedido os limites definidos nas opções de configuração como gc.auto e gc.autoPackLimit o processo de limpeza é acionado, todas as outras tarefas de limpeza (como rerere, árvores de trabalho, reflog…​, etc) também serão executados.

--[no-]detach

Run in the background if the system supports it. This option overrides the gc.autoDetach config.

--[no-]cruft

Ao expirar os objetos inalcançáveis, empacote-os separadamente num pacote simples em vez de armazena-los como objetos soltos. É predefinido que a opção --cruft esteja ativa.

--max-cruft-size=<n>

Ao empacotar objetos inalcançáveis num pacote de cruft, limite o tamanho dos novos pacotes de cruft para que tenham no máximo <n> bytes. Substitui qualquer valor especificado por meio da configuração gc.maxCruftSize. Consulte a opção --max-cruft-size do git-repack[1] para obter mais informações.

--expire-to=<diretório>

When packing unreachable objects into a cruft pack, write a cruft pack containing pruned objects (if any) to the directory <dir>. This option only has an effect when used together with --cruft. See the --expire-to option of git-repack[1] for more information.

--prune=<data>

Elimina objetos soltos mais antigos que a data (a predefinição é 2 semanas atrás, substituível pela variável de configuração gc.pruneExpire). A opção --prune=now remove objetos soltos independentemente de sua idade e aumenta o risco de corrupção se outro processo estiver gravando no repositório simultaneamente; consulte "NOTAS" abaixo. A predefinição é que a opção --prune sempre esteja ativada.

--no-prune

Não corte qualquer dos objetos soltos.

--quiet

Suprimir todos os relatórios de progresso.

--force

Imponha a execução do git gc mesmo que possa haver uma outra instância do git gc em execução neste repositório.

--keep-largest-pack

Todos os pacotes, exceto o maior pacote que não seja de rascunho, todos os pacotes marcados com um arquivo .keep e todos os pacotes de rascunho são consolidados num único pacote. Quando esta opção é utilizada, o gc.bigPackThreshold é ignorado.

AGRESSIVO

Quando a opção --aggressive é utilizada, git-repack[1] será invocado com a opção -f, que por sua vez passará a opção --no-reuse-delta para git-pack-objects[1]. Isso descartará quaisquer deltas existentes e os computará novamente, às custas de se gastar muito mais tempo na re-embalagem.

Os efeitos disso são predominantemente persistentes, por exemplo, quando os pacotes e os objetos soltos são reunidos entre si, os deltas existentes neste pacote podem ser reutilizados, porém também existem vários casos onde em vez disso, podemos escolher um delta não otimizado de um pacote mais novo.

Além disso, utilizar --aggressive irá ajustar as opções --depth e --window encaminhadas para o git-repack[1]. Consulte as configurações gc.aggressiveDepth e gc.aggressiveWindow abaixo. Ao utilizar um tamanho de janela maior, é mais provável que encontremos deltas mais otimizados.

Provavelmente não vale a pena utilizar esta opção em um determinado repositório sem antes executar um benchmark de desempenho sob medida. Leva muito mais tempo e a otimização de espaço/delta resultante pode ou não valer a pena. Não utilizar isso de forma alguma é um dilema para a maioria dos usuários e seus repositórios.

CONFIGURAÇÃO

Tudo abaixo desta linha nesta seção, está seletivamente incluído na documentação git-config[1]. O conteúdo é o mesmo que é encontrado ali:

Warning

Missing pt_BR/config/gc.adoc

See original version for this content.

OBSERVAÇÕES

O comando git gc evita muito a não exclusão dos objetos que possuam referencias em qualquer lugar do seu repositório. Ele manterá não apenas os objetos referenciados pelo seu conjunto atual das ramificações e as tags, mas também os objetos referenciados através do índice, as ramificações monitoradas remotamente, reflogs (que podem fazer referência no commit dos ramos que foram alterados ou retrocedido posteriormente) e qualquer outra coisa no espaço dos nomes refs/*. Observe que uma nota (do tipo criado através do git notes) anexada a um objeto não contribui para manter o objeto vivo. Caso esteja esperando que alguns objetos sejam excluídos e não foram, verifique todos estes locais e decida se faz sentido remover as referências ou não.

Por outro lado, quando o git gc é executado simultaneamente com outro processo, existe o risco de excluir um objeto que o outro processo está utilizando e que não criou uma referência para ele ainda. Isso pode causar falha no outro processo ou corromper o repositório caso o outro processo adicione posteriormente uma referência ao objeto excluído. O Git possui dois recursos que atenuam bastante este problema:

  1. Qualquer objeto com um tempo de modificação mais recente que a data --prune é mantido, junto com tudo o que pode ser acessado.

  2. A maioria das operações que adicionam um objeto ao banco de dados atualiza a hora da modificação do objeto, caso já esteja presente para que #1 se aplique.

No entanto, estes recursos ficam aquém de uma solução completa; portanto, os usuários que executam comandos simultaneamente, precisam enfrentar algum risco de corrupção (o que na pratica, o risco parece ser baixo).

GANCHOS

O comando git gc --auto executará o gancho pre-auto-gc. Para mais informações consulte githooks[5].

GIT

Parte do conjunto git[1]

AltStyle によって変換されたページ (->オリジナル) /