2011年6月12日日曜日

git とは

gitというのは、分散ソース管理システムの一種。

中身は何かと言うと、ファイルシステムと考えると分かりやすい。内部には以下の情報を持つ。

  • ファイルの中身を、バージョン間の差はとらず、個別のデータとして詰め込んだデータベース
  • あるバージョンのスナップショット情報(あるバージョンで、あるディレクトリに存在したファイルは、データベース中のどのデータかという情報)
  • バージョンの流れ、コミット時のコメント、ブランチなどの管理情報

ユーザがgitを使うと、gitコマンドは内部のデータベースと、展開中のファイルを使って、差分はこれだよとか、変更したファイル一覧はこれですとか、表示してくれる。

ファイルが個別に保存されているので、古いバージョンを取り出すときにはその間でdiffを取るだけ。従来問題だった、差分を再帰的に当てた上でdiffを取るといった面倒な処理は必要ないので、非常に高速にバージョン間の比較が行える。

また、分散ソース管理では、gitそのものが単純な仕組みのため、基本的に以下の情報をやりとりするだけで実現できる。

  • データベース間で追加されたファイル
  • 追加されたスナップショット情報
  • 追加された管理情報
扱うデータが、他のデータに依存しないため、非常に単純だ。

gitは、こういう単純な仕組みの上に、強力なmergeエンジンや、rebase処理を実装することで、スマートで力強い、かつ非常に高速なバージョン管理システムになっている。俺は、gitで、初めてLinusさんを尊敬した。