Git Garbage Collection: Mantendo o Repositório Otimizado
+------------------------+
| Garbage Collection |
| |
| Cleanup + Optimization |
| Pack + Compress |
| Maintain Performance |
| |
| git gc |
+------------------------+
Como Funciona
Processo Básico
Gatilhos Automáticos
+------------------+
| TRIGGERS |
+------------------+
| • Push |
| • Fetch |
| • Merge |
| • Threshold |
+------------------+
O que é Coletado
Tipos de Objetos
Processo de Coleta
Comandos Principais
Comandos Básicos
# GC básico
git gc
# GC agressivo
git gc --aggressive
# GC automático
git gc --auto
# Prune
git prune
Configurações
# Ajustar threshold
git config gc.auto 256
# Frequência de auto-gc
git config gc.autoPackLimit 50
# Expiração de objetos
git config gc.pruneExpire "2.weeks.ago"
Otimização de Performance
Estratégias
+----------------------+
| OTIMIZAÇÕES |
| |
| • Delta compression |
| • Repack |
| • Prune |
| • Reflog expire |
+----------------------+
Comandos Avançados
# Repack otimizado
git repack -ad
# Expirar reflog
git reflog expire --expire=now --all
# Verificar objetos
git fsck --full
# EstatÃsticas
git count-objects -v
Manutenção Programada
Rotina de Manutenção
Agendamento
# Iniciar manutenção
git maintenance start
# Configurar agenda
git maintenance register
# Executar agora
git maintenance run --task=gc
Troubleshooting
Problemas Comuns
+----------------------+
| PROBLEMAS |
| |
| • GC muito lento |
| • Espaço em disco |
| • Objetos perdidos |
| • Performance |
+----------------------+
Diagnóstico
# Verificar objetos
git fsck --unreachable
# Analisar packfiles
git verify-pack -v .git/objects/pack/*.idx
# Encontrar objetos grandes
git rev-list --objects --all | git cat-file --batch-check
Boas Práticas
Recomendações
GC regular
Backup antes de GC agressivo
Monitorar tamanho
Verificar integridade
Configurações Recomendadas
# Para repos grandes
git config gc.auto 1024
git config gc.autoPackLimit 100
git config gc.pruneExpire "1.month.ago"
Monitoramento
Métricas Importantes
Comandos de Monitoramento
# EstatÃsticas detalhadas
git count-objects --verbose
# Tamanho dos packfiles
du -sh .git/objects/pack/
# Objetos grandes
git verify-pack -v .git/objects/pack/*.idx | sort -k 3 -n | tail -10
Próximos Passos
Tópicos Relacionados
22 abril 2025