Sinossi
git cat-file (-t | -s | -p | -e) <object>
git cat-file --batch
git cat-file --batch-check
Descrizione
Il comando git cat-file è uno strumento plumbing che legge oggetti Git grezzi dal database degli oggetti. Può stampare il tipo di un oggetto (blob, tree, commit, tag), dimensione e contenuto. La modalità --batch permette agli script di passare molti nomi di oggetti su stdin e ricevere output strutturato, che è molto più veloce che invocare cat-file per oggetto.
Nell'uso quotidiano, git cat-file si integra con alias e CI.
Capire il modello dati di Git aiuta a prevedere i risultati.
Quando usarlo
La maggior parte degli sviluppatori non ha mai bisogno di git cat-file direttamente — comandi porcelain come git show, git log e git diff lo avvolgono trasparentemente. Ricorri ad esso quando scrivi script che percorrono oggetti Git, debugghi corruzione del repository o impari come Git memorizza i dati internamente.
Opzioni comuni
| Opzione | Descrizione |
|---|---|
-t | Stampa il tipo di oggetto. |
-s | Stampa la dimensione dell'oggetto in byte. |
-p | Pretty-print dei contenuti in modo type-aware. |
-e | Esce zero se l'oggetto esiste. |
--batch | Stream <sha> <type> <size> CRLF <content> per ogni input. |
--batch-check | Come batch, ma solo righe header. |
--filters | Applica filtri smudge quando stampa blob. |
Esempi
git cat-file -t HEAD
# commit
git cat-file -p HEAD
# Mostra il messaggio di commit e gli SHA tree/parent
git cat-file -p HEAD:src/main.c
# Stampa il file come era a HEAD
echo HEAD | git cat-file --batch-check
# Ottiene type/size/SHA in formato leggibile da macchina
Errori comuni
Passare uno SHA parziale che è ambiguo restituisce un errore — disambigualo con più caratteri. Dimenticare -p e usare -t non stampa i contenuti. La modalità --batch richiede gestione attenta del protocollo; rispetta l'header di dimensione per leggere il giusto numero di byte.
Comandi correlati
git show, git hash-object, git ls-tree, git rev-parse