在answer to a question about the internal format of git’s tree objects中,为了获取存储在包中的一个特定树对象,我使用git unpack-objects
解压缩了存储库包文件中的所有对象。这似乎有点矫枉过正。是的,我意识到git show --raw
,git ls-tree
或git cat-file
这样的命令会将关闭转换为内部格式。
如何以内部格式输出git输出单个对象 - 包括blob
,tree
,commit
或tag
标头 - 无论是否为以松散或包装格式存储?
答案 0 :(得分:5)
您可以先使用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