Как распаковать один объект git?
В ответ на вопрос о внутреннем формате объектов дерева git, чтобы добраться до одного конкретного объекта дерева, который был сохранен в пакете, я распаковал все объекты в пакетные файлы репозитория, используя git unpack-objects
, Это кажется излишним. Да я понимаю что команды такие git show --raw
, git ls-tree
, или же git cat-file
будет приближаться к внутреннему формату.
Как мне сделать так, чтобы git выводил один объект во внутреннем формате? blob
, tree
, commit
, или же tag
заголовок - независимо от того, хранится ли он в свободном или упакованном формате?
1 ответ
Сначала вы можете использовать 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