このスレッドは次のように述べています:
空のツリーsha1を覚えていない場合は、いつでもそれを派生させることができます。
git hash-object -t tree /dev/null
または、Ciro Santilliがコメントで提案しているように:
printf '' | git hash-object --stdin -t tree
または、ここで見られるように、コリン・シムルフィングから:
git hash-object -t tree --stdin < /dev/null
したがって、そのコマンドの結果を変数に空のsha1ツリーとして定義する方が(「既知の値」に依存するのではなく)より安全だと思います。
注:Git 2.25.1(2020年2月)は、コミット9c8a294で提案しています:
empty_tree=$(git mktree </dev/null)
# Windows:
git mktree <NUL
そして追加:
歴史的な注記として、346245a1bbでrepo_read_object_file()
空のツリーを教えられたように現在知られている関数( "空のツリーオブジェクトのハードコード"、2008-02-13、Git v1.5.5-rc0- merge)、および現在知られている関数c4d9986f5fで空のツリーを教えられたように( " :ストアも調べて"、2011-02-07、Git v1.7.4.1)。 oid_object_info()
sha1_object_info
cached_object
注:著者が最初のコミットを空にしたい場合、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値には依存しません。ベストプラクティス
に従って、最初の空のcommitでリポジトリを初期化します。
それを行うには:
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 On Windowsコマンドを使って動作します)
以下のコメント使用して、git diff <commit> HEAD
これは現在のブランチのHEAD内のすべてのファイルが表示されます:
git diff --name-only 4b825dc642cb6eb9a060e54bf8d69288fbee4904 HEAD
注:空のツリー値はで正式に定義されていcache.h
ます。
#define EMPTY_TREE_SHA1_HEX \
"4b825dc642cb6eb9a060e54bf8d69288fbee4904"
Git 2.16(2018年第1四半期)以降、コミットeb0ccfdに見られるように、SHA1(のみ)に関連付けられなくなった構造で使用されます。
空のツリーとblobルックアップを切り替えてハッシュ抽象化を使用する
使用を切り替えempty_tree_oid
してempty_blob_oid
使用するようにcurrent_hash
現在使用中のハッシュアルゴリズムを表して抽象化を。
詳しくは、「Gitが最新のSHAを使用しない理由」をご覧ください。Git2.19(2018年第3四半期)以降はSHA-2です。
Git 2.25(2020年第1四半期)では、テストはSHA-2移行の準備中であり、空のツリーが関係しています。
参照fa26d5eをコミットし、cf02be8をコミットし、38ee26bをコミットし、37ab8ebをコミットし、0370b35をコミットし、0253e12をコミットし、45e2ef2をコミットし、79b0edcをコミットし、840624fをコミットし、32a6707をコミットし、440bf91をコミットし、0b408caをコミットし、2eabd38をコミット(2019年10月28日)、および1bcef51をコミットし、コミットecde49b(2019年10月5日)by brian m。カールソン(bk2204
)。
(合併によりJunio C浜野- gitster
-で28014c1コミット、2019年11月10日)
サインオフ:brian m。カールソン
テストスイートは最終的にSHA-1以外のアルゴリズムを使用して実行する方法を学習します。これに備えてtest_oid
、関数のファミリーに、空のblobと空のツリーの値を調べて使用できるようにする方法を教えます。
だからt/oid-info/hash-info
今含まれています:
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
SHA2 " 6ef19b41225c5369f1c104d45d8d85efa9b057b53b14b4b9b939dd74decc5321
"は新しいSHA1 " 4b825dc642cb6eb9a060e54bf8d69288fbee4904
"空のツリーです。