◆ 4b825dc642cb6eb9a060e54bf8d69288fbee4904

前に git では全員で共通な特別なハッシュ値があって それは 空の状態(リポジトリ作った直後の初期状態) を表すものとどこかでみました

見たはずなんです


なのにググってもどこにも見当たらないです
「git 特別なハッシュ値」「git sha-1 特殊」「git 初期状態 sha-1」 など

いろいろ試しても全然ダメです
日本語のページだったように思うのですが 見当たらないです

前にも見たはずなのにどこ探してもない ってことがあったので 自分の記憶力が信用ならなくなってきてますが 絶対あったはずなんだ!!

と数時間調べてました


全然みつかりません


そういえば git のことを詳しく内部的な object がどうなってるとかも書いた gist を見た覚えがあります
こういう裏技的というか隠し機能的なことならきっともうそこしかない!

と思って探していると

見つかりました

でも SHA-1 の特殊な値については全く書いてません


諦めようとしたとき

本当に空の状態を表すものがあるならリポジトリ作成して .git みればあるんじゃないかな と名案が!!!


さっそくみてみるも……

作ったばかりではどこも空です
object にはファイルが全くありません



また諦めようとしたとき 「空状態を表すならファイルなしでコミットすればできないかな」 と閃きが!!!

コメントもファイルも無しでこんなコミット
git commit --allow-empty --allow-empty-message -m ""

ハッシュ値は
f4d8eea07a6338fc36ce67e814a4b79e6f1d2178

んー こんなだったかなぁ……?

もう一回コミットしてみたり リポジトリ作り直して同じく空コミットしてみましたが 毎回違うハッシュ値です

親のコミットや コミット時刻もハッシュ値の計算対象??
そんなことはどっちでもいいのですが この方法だとだめそうでした


今度こそ諦めようと この一時リポジトリを削除しようとしてなんとなく object 表示をみると

なぜか 2 つのハッシュ値があります

今の状態は空コミット 1 回のはず…………

もしかして!!!!

一方は空コミットのハッシュ値

もう一方をググってみると

4b825dc642cb6eb9a060e54bf8d69288fbee4904


キタ !!!!!!!!!!!!!!!!!!!!

とうとう見つけた!!!!



このハッシュ値が empty tree を表す git の特殊なハッシュ値のようです


今度こそ私の記憶が正しかったんだ!



何時間も苦労したかいがありました


それにしても検索結果はほぼ英語のみ
一件日本語のページの Qiita がありますが pre-commit.sample というコミット時のフック関係みたい
私の検索ワードじゃ引っかからないわけです

全体でも検索結果は 4660 件
かなり少ないです

あまり知られてないマイナーな知識なんですね