Por qué maintenance, no gc
git maintenance (Git 2.31+) es el reemplazo moderno orientado a tareas para gc --auto. Ejecuta tareas específicas (commit-graph, prefetch, incremental-repack, loose-objects, pack-refs, gc) en horarios afinados para cada una, en background, sin bloquear tus comandos interactivos.
Iniciar
git maintenance start
git maintenance start --scheduler=systemd
git maintenance start --scheduler=launchctl
git maintenance start --scheduler=schtasks
Inspeccionar y detener
git maintenance status
git maintenance stop
git maintenance unregister
Tareas y horarios
| Tarea | Horario predeterminado | Qué hace |
|---|---|---|
| commit-graph | cada hora | Actualiza el commit-graph |
| prefetch | cada hora | Hace fetch a refs ocultas |
| loose-objects | diario | Empaqueta objetos sueltos |
| incremental-repack | diario | Repack geométrico + MIDX |
| pack-refs | semanal | Empaqueta refs sueltas |
| gc | off por defecto | gc completo; prefiere los otros |
Ejecuciones manuales
git maintenance run --task=commit-graph
git maintenance run --task=incremental-repack
git maintenance run --auto
Config por tarea
[maintenance]
auto = false
strategy = incremental
[maintenance "commit-graph"]
enabled = true
[maintenance "incremental-repack"]
enabled = true
auto = 100
[maintenance "loose-objects"]
enabled = true
batchSize = 50
Deshabilitar auto-gc
git config gc.auto 0
Errores comunes
Olvidar git maintenance start tras clonar un repo grande.
Logs
En systemd: journalctl --user -u git-maintenance.service. En macOS: ~/Library/Logs/git-maintenance.log.