В этой теме упоминается:
Если вы не помните пустое дерево sha1, вы всегда можете получить его с помощью:
git hash-object -t tree /dev/null
Или, как Сиро Сантилли предлагает в комментариях :
printf '' | git hash-object --stdin -t tree
Или, как здесь , из Колин Шиммельфинг :
git hash-object -t tree --stdin < /dev/null
Так что, я думаю, безопаснее определить переменную с результатом этой команды как пустое дерево sha1 (вместо того, чтобы полагаться на "общеизвестное значение").
Обратите внимание, вы увидите, что SHA1 появляется в каком-либо репозитории GitHub, когда автор хочет, чтобы его первый коммит был пустым (см. Сообщение в блоге " Как я инициализирую свои репозитории Git "):
$ GIT_AUTHOR_DATE="Thu, 01 Jan 1970 00:00:00 +0000" GIT_COMMITTER_DATE="Thu, 01 Jan 1970 00:00:00 +0000" git commit --allow-empty -m 'Initial commit'
Даст вам:

(Видите дерево SHA1?)
Вы даже можете перебазировать существующую историю поверх этого пустого коммита (см. " git: как вставить коммит как первый, сдвинув все остальные? ")
В обоих случаях вы не полагаетесь на точное значение SHA1 этого пустого дерева.
Вы просто следуете рекомендациям , инициализируя репо первым пустым коммитом .
Для этого:
git init my_new_repo
cd my_new_repo
git config user.name username
git config user.email email@com
git commit --allow-empty -m "initial empty commit"
Это создаст коммит с SHA1, специфичным для вашего репо, имени пользователя, адреса электронной почты, даты создания (т.е. SHA1 самого коммита будет отличаться каждый раз).
Но дерево, на которое ссылается этот коммит, будет 4b825dc642cb6eb9a060e54bf8d69288fbee4904
, пустое дерево SHA1.
git log --pretty=raw
commit 9ed4ff9ac204f20f826ddacc3f85ef7186d6cc14
tree 4b825dc642cb6eb9a060e54bf8d69288fbee4904 <====
author VonC <vonc@laposte.net> 1381232247 +0200
committer VonC <vonc@laposte.net> 1381232247 +0200
initial empty commit
Чтобы показать только дерево коммита (отобразить дерево коммитов SHA1):
git show --pretty=format:%T 9ed4ff9ac204f20f826ddacc3f85ef7186d6cc14
4b825dc642cb6eb9a060e54bf8d69288fbee4904
Если этот коммит, ссылающийся на пустое дерево, действительно является вашим первым коммитом, вы можете показать это пустое дерево SHA1 с помощью:
git log --pretty=format:%h --reverse | head -1 | xargs git show --pretty=format:%T
4b825dc642cb6eb9a060e54bf8d69288fbee4904
(и это работает даже в Windows с Gnu в Windows командами)
Как отметили ниже , используя git diff <commit> HEAD
, это покажет все ваши файлы в текущей ветке HEAD:
git diff --name-only 4b825dc642cb6eb9a060e54bf8d69288fbee4904 HEAD
Примечание: это пустое значение дерева формально определено в cache.h
.
#define EMPTY_TREE_SHA1_HEX \
"4b825dc642cb6eb9a060e54bf8d69288fbee4904"
Теперь (Git 2.16, Q1 2018) используйте в структуре, которая больше не привязана (только) к SHA1, как видно из commit eb0ccfd :
Переключить поиск пустого дерева и блобов на использование абстракции хеша
Переключите использование empty_tree_oid
и empty_blob_oid
, чтобы использовать абстракцию current_hash
, которая представляет текущий алгоритм хеширования в
использовать.
Подробнее на " Почему Git не использует более современные SHA? "