2016-03-10 13 views
5

In un answer to a question about the internal format of git’s tree objects, per ottenere uno specifico oggetto ad albero che è stato memorizzato in un pacchetto, ho decompresso tutti gli oggetti nei file pack di un repository usando git unpack-objects. Sembra eccessivo. Sì, mi rendo conto che comandi come git show --raw, git ls-tree o git cat-file otterranno close nel formato interno.Come posso decomprimere un singolo oggetto git?

Come faccio a creare uscita git un singolo oggetto nel suo formato interno - completo di blob, tree, commit, o tag intestazione - indipendentemente dal fatto che vengono memorizzati in formato allentato o confezionato?

+2

Si può solo zlib decomprimerlo con 'zpipe -d < ' 'dall'interno .git/objects' –

+0

@AndrewC Sì , se è già un oggetto libero, ma cosa succede se vive in un branco? –

+0

Greg ho pensato che la premessa della tua domanda era che avevi spacchettato gli oggetti e avevi un oggetto libero. Non conosco la risposta per farlo da un file pack, tranne per decomprimerlo prima. –

risposta

4

È possibile utilizzare git pack-objects innanzitutto per creare un pacchetto con solo questo oggetto.

Nota anche che git unpack-objects non estrae oggetti già esistenti in un repository, quindi probabilmente vorrai creare un nuovo repository. qualcosa di complesso come questo dovrebbe funzionare:

$ DIR=$(mktemp -d) 
$ echo 5e98806c6cc246acef5f539ae191710a0c06ad3f \ 
    | git pack-objects --stdout \ 
    | (cd "$DIR" && git init && git unpack-objects) 

quindi cercare l'oggetto spacchettato in $DIR/.git/objects

Problemi correlati