Sinossi
git archive [--format=<fmt>] [--prefix=<p>/] [-o <file>] <tree-ish> [<path>...]
Descrizione
Il comando git archive crea un file tar o zip contenente i contenuti di qualsiasi tree (commit, tag o branch). A differenza di un semplice tar della working tree, include solo file tracciati a una specifica revisione ed esclude le directory .git. Questo lo rende ideale per produrre tarball di rilascio, distribuzioni sorgente e snapshot riproducibili.
L'opzione --prefix avvolge tutti i file sotto una sottodirectory dentro l'archivio — importante per le release così che l'estrazione crei una cartella nominata. git archive supporta anche l'esecuzione su rete da server che lo permettono.
Nell'uso quotidiano, git archive si integra con alias e CI.
Capire il modello dati di Git aiuta a prevedere i risultati.
Opzioni comuni
| Opzione | Descrizione |
|---|---|
--format=<fmt> | tar, tar.gz, zip (default tar). |
--prefix=<p>/ | Antepone una directory a tutti i path nell'archivio. |
-o <file> | Scrive su file invece che su stdout. |
--remote=<repo> | Archivia da un repository remoto. |
--worktree-attributes | Onora gli attributi export-ignore. |
-l, --list | Elenca formati supportati. |
Esempi
git archive --format=tar.gz --prefix=myproj-1.0/ -o myproj-1.0.tar.gz v1.0
# Tarball di release con directory di top level nominata
git archive HEAD docs/ | tar -x -C /tmp/docs
# Estrae la directory docs/ all'HEAD in /tmp/docs
git archive --format=zip -o snapshot.zip HEAD
# Archivio ZIP del tree corrente
Esempi (continua)
# Usa .gitattributes per escludere file dagli archivi:
echo "tests/ export-ignore" >> .gitattributes
echo ".github/ export-ignore" >> .gitattributes
git archive --worktree-attributes -o release.tar.gz HEAD
Errori comuni
Dimenticare --prefix crea un archivio che esplode i file nella directory corrente al momento dell'estrazione. Senza attributi export-ignore, il tuo archivio può includere config CI, test e file solo per dev che non intendevi spedire.
Comandi correlati
git bundle, git tag, git show, tar