ブラウザ内ツール

Gitオブジェクトハッシュ体感

git addした瞬間、gitは中身から1つのハッシュ値(オブジェクトID)を計算します。 テキストを貼ると、そのハッシュをgit hash-objectと 全く同じ手順でその場で計算し、過程を可視化します。

1. ヘッダを組み立てる

blob + 半角スペース + 0(内容のUTF-8バイト数)+ \0(NUL文字)

2. ヘッダ+内容を1本のバイト列として連結

blob 0\0hello world

3. SHA-1でハッシュ化 → これがgitのオブジェクトID

計算中…

同じ内容をファイルに保存して git hash-object <ファイル> を実行すると、上と全く同じハッシュ値が返ります。 コミットやツリーオブジェクトも「ヘッダ+内容のSHA-1」という同じ考え方の応用です。SHA-1自体の暗号学的な強度については なぜGitが勝ったかで解説しています。すべてこのブラウザ内で計算し、送信しません。

「コミットが軽い」理由はここにある

gitは差分ではなく、この内容そのもののハッシュでファイルを識別します。 同じ内容のファイルが2つあれば、リポジトリのどこにあっても同じオブジェクトID=同じ保存先を指すため、 実体は1つだけ保存すれば済みます。ブランチをいくら切っても中身が同じファイルはコピーされない理由もこれです。