Gitオブジェクトの特徴とデータフォーマットの解説
Gitのオブジェクトには4種類ある。
- blob
- tree
- commit
- tag
すべてのオブジェクトは次の特徴を持つ
- zlib で圧縮されている
- データにはヘッダがあり、ヘッダにはオブジェクトの種別とオブジェクトデータのサイズ情報が含まれる。
- オブジェクトの名前に使用されている SHA-1 ハッシュ値はヘッダ+ボディのハッシュ値となっている。(ファイルの sha1sum の結果とは異なる)
オブジェクのデータフォーマット
zlib解凍して得られたデータは下記のようになっている。<オブジェクトの種別> 空白 <サイズ> + <byte\0> + <オブジェクトのバイナリデータ>
疑似コードで表現すると下記のような感じである。
"blob" + " " + size + "\0" + binary_content
参考
Chapter 10. git をハックする - オブジェクトの保管形式
カテゴリ:
Git