Git の内部がどうなっているのか気になったのですが,深く理解しなくても使えるツールなので,ざっくりとまとめます.
Git の要点
- Git は key-value 型データストアでデータを管理している.
- Git オブジェクトには,blob, tree, commit, tag の4種類が存在する.
- SHA-1 ハッシュを利用して管理する.
あとは図をみれば理解しやすいです.簡単な例を引用します.
commit を追加したときの挙動
blob オブジェクトはデータ構造の最下部にあり,何も参照せずに tree オブジェクトからのみ参照される.上の図で blob は長方形で表されている.
tree オブジェクトは blob を参照し,他の tree を参照する場合もある.任意の tree オブジェクトは多くの別の commit オブジェクトから参照されるかもしれない.tree は三角形で表されている.
commit はコミットによってリポジトリに導入された特定の tree を参照する.commit は円で表されている.
tag は最大で1つの commit を参照することができる.tag はひし形で表されている.
branch は Git の必須オブジェクトではないが commit の名前を決める上で重要な役割を果たす.branch は角丸長方形で表されている.
もとの2つのファイルはそのままにして,1つのファイルを入れた新しいサブディレクトリを追加すると,以下のように変化する.
最初の図と比較すると,変更履歴を含めて全ての情報が効率的に管理されていることが分かります.
参考
- Version Control with Git https://www.oreilly.com/library/view/version-control-with/9780596158187/ch04s02.html
- Pro Git book https://git-scm.com/book/en/v2/Git-Internals-Git-Objects