Este tópico menciona:
Se você não se lembra da árvore vazia sha1, sempre pode derivá-la com:
git hash-object -t tree /dev/null
Ou, como Ciro Santilli propõe nos comentários :
printf '' | git hash-object --stdin -t tree
Ou, como visto aqui , de Colin Schimmelfing :
git hash-object -t tree --stdin < /dev/null
Portanto, acho que é mais seguro definir uma variável com o resultado desse comando como sua árvore sha1 vazia (em vez de confiar em um "valor conhecido").
Nota: O Git 2.25.1 (fevereiro de 2020) propõe em commit 9c8a294 :
empty_tree=$(git mktree </dev/null)
# Windows:
git mktree <NUL
E acrescenta:
Como uma nota histórica, a função agora conhecida como repo_read_object_file()
foi ensinada a árvore vazia em 346245a1bb ("codifique o objeto da árvore vazia", 13-02-2008, Git v1.5.5-rc0 - mesclagem ) e a função agora conhecida como oid_object_info()
foi ensinado a árvore vazia em c4d9986f5f ("sha1_object_info
: examine cached_object
store too", 07-02-2011, Git v1.7.4.1).
Observe que você verá que o SHA1 aparece em algum repositório do GitHub quando o autor deseja que seu primeiro commit fique vazio (consulte a publicação no blog " repositório Como inicializar meus repositórios 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'
Darei à você:
(Veja a árvore SHA1?)
Você pode até refazer o histórico existente sobre esse commit vazio (consulte " git: como inserir um commit como o primeiro, alterando todos os outros? ")
Nos dois casos, você não depende do valor exato de SHA1 dessa árvore vazia.
Você simplesmente segue uma prática recomendada, inicializando seu repositório com um primeiro commit vazio .
Fazer isso:
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"
Isso gerará uma confirmação com um SHA1 específico para seu repositório, nome de usuário, email, data de criação (o que significa que o SHA1 do próprio envio será diferente a cada vez).
Mas a árvore referenciada por esse commit será4b825dc642cb6eb9a060e54bf8d69288fbee4904
a árvore vazia 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
Para mostrar apenas a árvore de uma confirmação (exiba a árvore de confirmação SHA1):
git show --pretty=format:%T 9ed4ff9ac204f20f826ddacc3f85ef7186d6cc14
4b825dc642cb6eb9a060e54bf8d69288fbee4904
Se esse commit, referenciando uma árvore vazia, for realmente o seu primeiro commit, você poderá mostrar esse SHA1 da árvore vazia com:
git log --pretty=format:%h --reverse | head -1 | xargs git show --pretty=format:%T
4b825dc642cb6eb9a060e54bf8d69288fbee4904
(e isso ainda funciona no Windows, com o Gnu On Windows comandos do )
Como comentado abaixo , usando git diff <commit> HEAD
, isso mostrará todo o seu arquivo no ramo atual HEAD:
git diff --name-only 4b825dc642cb6eb9a060e54bf8d69288fbee4904 HEAD
Nota: esse valor vazio da árvore é formalmente definido em cache.h
.
#define EMPTY_TREE_SHA1_HEX \
"4b825dc642cb6eb9a060e54bf8d69288fbee4904"
Desde o Git 2.16 (primeiro trimestre de 2018), ele é usado em uma estrutura que não está mais vinculada ao (apenas) SHA1, como visto em commit eb0ccfd :
Alterne as pesquisas em árvore e blob vazias para usar a abstração de hash
Alterne os usos de empty_tree_oid
e empty_blob_oid
para usar a current_hash
abstração que representa o algoritmo de hash atual em uso.
Veja mais em " Por que o Git não usa SHA mais moderno? ": É SHA-2 , desde o Git 2.19 (terceiro trimestre de 2018)
Com o Git 2.25 (primeiro trimestre de 2020), os testes estão se preparando para uma transição SHA-2 e envolvem a árvore vazia.
Veja cometer fa26d5e , cometer cf02be8 , cometer 38ee26b , cometer 37ab8eb , cometer 0370b35 , cometer 0253e12 , cometer 45e2ef2 , cometer 79b0edc , cometer 840624f , cometer 32a6707 , cometer 440bf91 , cometer 0b408ca , cometer 2eabd38 (28 de outubro de 2019), e comprometer 1bcef51 , cometer ecde49b (05 Out 2019) por brian m. Carlson ( bk2204
) .
(Mesclado por Junio C Hamano - gitster
- no commit 28014c1, 10 nov 2019)
t/oid-info
: adicionar árvore vazia e valores de blob vazios
Assinado por: brian m. Carlson
Eventualmente, o testsuite aprenderá a executar usando um algoritmo que não seja o SHA-1. Em preparação para isso, ensine à test_oid
família de funções como procurar o blob vazio e os valores da árvore vazia para que possam ser usados.
Então t/oid-info/hash-info
agora inclui:
rawsz sha1:20
rawsz sha256:32
hexsz sha1:40
hexsz sha256:64
zero sha1:0000000000000000000000000000000000000000
zero sha256:0000000000000000000000000000000000000000000000000000000000000000
algo sha1:sha1
algo sha256:sha256
empty_blob sha1:e69de29bb2d1d6434b8b29ae775ad8c2e48c5391
empty_blob sha256:473a0f4c3be8a93681a267e3b1e9a7dcda1185436fe141f7749120a303721813
empty_tree sha1:4b825dc642cb6eb9a060e54bf8d69288fbee4904
empty_tree sha256:6ef19b41225c5369f1c104d45d8d85efa9b057b53b14b4b9b939dd74decc5321
O SHA2 " 6ef19b41225c5369f1c104d45d8d85efa9b057b53b14b4b9b939dd74decc5321
" é a nova 4b825dc642cb6eb9a060e54bf8d69288fbee4904
árvore vazia do SHA1 " ".