中身は何かと言うと、ファイルシステムと考えると分かりやすい。内部には以下の情報を持つ。
- ファイルの中身を、バージョン間の差はとらず、個別のデータとして詰め込んだデータベース
- あるバージョンのスナップショット情報(あるバージョンで、あるディレクトリに存在したファイルは、データベース中のどのデータかという情報)
- バージョンの流れ、コミット時のコメント、ブランチなどの管理情報
ユーザがgitを使うと、gitコマンドは内部のデータベースと、展開中のファイルを使って、差分はこれだよとか、変更したファイル一覧はこれですとか、表示してくれる。
ファイルが個別に保存されているので、古いバージョンを取り出すときにはその間でdiffを取るだけ。従来問題だった、差分を再帰的に当てた上でdiffを取るといった面倒な処理は必要ないので、非常に高速にバージョン間の比較が行える。
また、分散ソース管理では、gitそのものが単純な仕組みのため、基本的に以下の情報をやりとりするだけで実現できる。
- データベース間で追加されたファイル
- 追加されたスナップショット情報
- 追加された管理情報
扱うデータが、他のデータに依存しないため、非常に単純だ。
gitは、こういう単純な仕組みの上に、強力なmergeエンジンや、rebase処理を実装することで、スマートで力強い、かつ非常に高速なバージョン管理システムになっている。俺は、gitで、初めてLinusさんを尊敬した。
0 件のコメント:
コメントを投稿