Как распаковать один объект 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

Другие вопросы по тегам