Gitオブジェクトの特徴とデータフォーマットの解説

Gitのオブジェクトには4種類ある。

  • blob
  • tree
  • commit
  • tag

すべてのオブジェクトは次の特徴を持つ

  • zlib で圧縮されている
  • データにはヘッダがあり、ヘッダにはオブジェクトの種別とオブジェクトデータのサイズ情報が含まれる。
  • オブジェクトの名前に使用されている SHA-1 ハッシュ値はヘッダ+ボディのハッシュ値となっている。(ファイルの sha1sum の結果とは異なる)

オブジェクのデータフォーマット

zlib解凍して得られたデータは下記のようになっている。
<オブジェクトの種別>  空白  <サイズ> + <byte\0> + <オブジェクトのバイナリデータ> 
疑似コードで表現すると下記のような感じである。
"blob" + " " + size + "\0" + binary_content

参考

Chapter 10. git をハックする - オブジェクトの保管形式
カテゴリ: