Setup and Config
Getting and Creating Projects
Basic Snapshotting
Branching and Merging
Sharing and Updating Projects
Inspection and Comparison
Patching
Debugging
External Systems
Server Admin
Guides
- gitattributes
- Command-line interface conventions
- Everyday Git
- Frequently Asked Questions (FAQ)
- Glossary
- Hooks
- gitignore
- gitmodules
- Revisions
- Submodules
- Tutorial
- Workflows
- All guides...
Administration
Plumbing Commands
- 2.47.0 10/06/24
- 2.43.1 → 2.46.2 no changes
- 2.43.0 11/20/23
- 2.42.1 → 2.42.3 no changes
- 2.42.0 08/21/23
- 2.41.1 → 2.41.2 no changes
- 2.41.0 06/01/23
- 2.38.1 → 2.40.3 no changes
- 2.38.0 10/02/22
- 2.37.1 → 2.37.7 no changes
- 2.37.0 06/27/22
- 2.31.1 → 2.36.6 no changes
- 2.31.0 03/15/21
- 2.30.1 → 2.30.9 no changes
- 2.30.0 12/27/20
- 2.24.1 → 2.29.3 no changes
- 2.24.0 11/04/19
- 2.22.1 → 2.23.4 no changes
- 2.22.0 06/07/19
- 2.21.1 → 2.21.4 no changes
- 2.21.0 02/24/19
- 2.20.1 → 2.20.5 no changes
- 2.20.0 12/09/18
- 2.19.1 → 2.19.6 no changes
- 2.19.0 09/10/18
- 2.18.1 → 2.18.5 no changes
- 2.18.0 06/21/18
- 2.13.7 → 2.17.6 no changes
- 2.12.5 09/22/17
- 2.11.4 09/22/17
- 2.10.5 no changes
- 2.9.5 07/30/17
- 2.7.6 → 2.8.6 no changes
- 2.6.7 05/05/17
- 2.5.6 no changes
- 2.4.12 05/05/17
- 2.1.4 → 2.3.10 no changes
- 2.0.5 12/17/14
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
egc.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çãogc.maxCruftSize
. Consulte a opção--max-cruft-size
do git-repack[1] para obter mais informações. - --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 dogit 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, ogc.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
Warning
|
Missing See original version for this content. |
Warning
|
Missing 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:
-
Qualquer objeto com um tempo de modificação mais recente que a data
--prune
é mantido, junto com tudo o que pode ser acessado. -
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]