Sinossi
git pack-objects [--stdout] [--all] <base-name> < <object-list>
Descrizione
Il comando git pack-objects comprime un set di oggetti in un singolo packfile, applicando compressione delta a oggetti simili. I pack sono come Git memorizza gli oggetti efficientemente su disco e in rete — ogni fetch e push trasferisce pack.
Nell'uso quotidiano, git pack-objects si integra con alias e CI.
Capire il modello dati di Git aiuta a prevedere i risultati.
Quando usarlo
Quasi mai lo invochi direttamente. git gc, git repack e il protocollo di rete lo guidano per te. Ricorri ad esso manualmente quando implementi trasporto personalizzato, ottimizzi lo storage o sperimenti con strategie delta.
Opzioni comuni
| Opzione | Descrizione |
|---|---|
--stdout | Scrive il pack su stdout invece che su file. |
--all | Impacchetta tutto raggiungibile da qualsiasi ref. |
--revs | Legge revisioni da stdin invece di SHA di oggetti. |
--depth=<n> | Profondità massima della catena delta. |
--window=<n> | Dimensione della window per ricerca delta. |
--thin | Permette pack thin (delta contro oggetti esterni). |
--no-reuse-delta | Ricalcola delta invece di riusare esistenti. |
Esempi
git rev-list --objects --all | git pack-objects --stdout > everything.pack
# Costruisce un singolo pack di ogni oggetto raggiungibile
git rev-list --objects HEAD ^origin/main | \
git pack-objects --thin --stdout > ahead.pack
# Un pack thin di solo i commit avanti rispetto a origin/main
git pack-objects --all .git/objects/pack/extra
# Repack di tutti gli oggetti raggiungibili in un nuovo pack chiamato "extra"
Errori comuni
Costruire pack grandi con --depth e --window impostati troppo alti consuma molta memoria e CPU. I default da git gc sono sensati per la maggior parte dei repo. Produrre pack thin senza contesto (un repo esistente a cui applicarli) è inutile.
Comandi correlati
git unpack-objects, git verify-pack, git gc, git repack