2016-03-10 24 views
5

answer to a question about the internal format of git’s tree objects中,爲了訪問存儲在包中的特定樹對象,我使用git unpack-objects將所有對象解壓到存儲庫的包文件中。這似乎是矯枉過正。是的,我意識到命令git show --raw,git ls-treegit cat-file將獲得關閉到內部格式。如何解開單個git對象?

如何使git的輸出單個對象在其內部格式 - 完成blobtreecommittag頭 - 無論它是否存儲在鬆動或壓縮格式?

+2

你可以只用的zlib'zpipe -d < ''從git的/ objects' –

+0

@AndrewC內解壓是,如果它已經是一個鬆散的對象,但如果它生活在一個包裏呢? –

+0

格雷格我認爲你的問題的前提是你打開了物品的包裝,並有一個鬆散的物體。我不知道從包文件中做出答案,除非先解包。 –

回答

4

您可以先使用git pack-objects先製作一個只包含這一個對象的包。

還要注意,git unpack-objects不會提取存儲庫中已經存在的對象,所以你可能想創建一個新的存儲庫。總體來說這樣的事情應該工作:

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

然後尋找你的解壓對象$DIR/.git/objects