Sinossi
git gc [--auto] [--aggressive] [--prune=<date>]
Descrizione
Il comando git gc esegue task di housekeeping: impacchetta oggetti loose, rimuove oggetti irraggiungibili oltre la finestra di prune, impacchetta i ref e aggiorna file ausiliari. Git esegue automaticamente gc --auto dopo operazioni che creano molti oggetti loose (come un fetch grande), quindi la maggior parte degli utenti non invoca mai gc manualmente. L'invocazione manuale è utile dopo aver riscritto la storia, cancellato molti branch o per recuperare spazio su disco immediatamente.
Il flag --aggressive fa lavoro extra — ricalcolando delta — ma raramente vale il tempo. Il comportamento predefinito di Git moderno è ben tunato. L'argomento --prune controlla quanto vecchi devono essere gli oggetti irraggiungibili prima di essere cancellati; il default è due settimane.
Nell'uso quotidiano, git gc si integra con alias e CI.
Capire il modello dati di Git aiuta a prevedere i risultati.
Opzioni comuni
| Opzione | Descrizione |
|---|---|
--auto | Esegue solo se le euristiche di Git dicono che è necessaria manutenzione. |
--aggressive | Spende più tempo cercando delta ottimali. |
--prune=<date> | Pota oggetti irraggiungibili più vecchi di questo. |
--no-prune | Salta il pruning di oggetti loose. |
--quiet | Sopprime output di progresso. |
--force | Esegue anche se un altro gc è in corso. |
Esempi
git gc
# Manutenzione di routine
git gc --auto
# Cosa Git esegue in background; sicuro da chiamare manualmente
git gc --prune=now
# Recupera spazio aggressivamente; cancella irraggiungibili recenti (usa con cura)
git gc --aggressive
# Repacking lento ed esaustivo — raramente vale la pena
Errori comuni
--prune=now cancella immediatamente oggetti irraggiungibili, possibilmente inclusi quelli ancora referenziati da reflog o stash. Non usarlo a cuor leggero. Disabilitare il gc automatico su un repo grande lascia accumulare oggetti loose; configura maintenance invece per Git più recente.
Comandi correlati
git maintenance, git repack, git prune, git fsck