配管(Plumbing)と磁器(Porcelain)
本書は、checkout
や branch
、remote
などの約30のコマンドを用いて、Git の使い方を説明しています。ですが、Git は元々、完全にユーザフレンドリーなバージョン管理システムというよりもむしろ、バージョン管理システムのためのツール類でした。そのため、下位レベルの仕事を行うためのコマンドが沢山あり、UNIXの形式(またはスクリプトから呼ばれる形式)と密に関わりながら設計されました。これらのコマンドは、通常は “配管(plumbing)” コマンドと呼ばれ、よりユーザフレンドリーなコマンドは “磁器(porcelain)” コマンドと呼ばれます。
本書のはじめの8つの章は、ほぼ例外なく磁器コマンドを取り扱いますが、本章では下位レベルの配管コマンドを専ら使用することになります。なぜなら、それらのコマンドは、Gitの内部動作にアクセスして、Gitの内部で、何を、どのように、どうして行うのかを確かめるのに役に立つからです。それらのコマンドは、コマンドラインから実行するのに使用されるのではなく、むしろ新規のツールとカスタムスクリプトのための構成要素(building blocks)として使用されます。
新規の、または既存のディレクトリで git init
を実行すると、Git は .git
というディレクトリを作ります。Git が保管して操作するほとんどすべてのものがそこに格納されます。もしもレポジトリをバックアップするかクローンを作りたいなら、この1つのディレクトリをどこかにコピーすることで、必要とするほとんどすべてのことが満たされます。この章では全体を通して、.git
ディレクトリの中を基本的に取り扱います。その中は以下のようになっています。
$ ls
HEAD
branches/
config
description
hooks/
index
info/
objects/
refs/
これは git init
を実行した直後のデフォルトのレポジトリです。それ以外の場合は、他にも幾つかのファイルがそこに見つかるかもしれません。branches
ディレクトリは、新しいバージョンのGitでは使用されません。description
ファイルは、GitWeb プログラムのみで使用します。そのため、それらについての配慮は不要です。config
ファイルには、あなたのプロジェクト固有の設定オプションが含まれます。info
ディレクトリは、追跡の対象に含めたくない除外パターンを .gitignore
ファイルに書くための、グローバルレベルで除外するファイルを保持します。hooks
ディレクトリには、あなたのクライアントサイド、または、サーバサイドのフックスクリプトが含まれます。それについての詳細は7章に記述されています。
残りの4つ(HEAD
ファイルと index
ファイル、また、objects
ディレクトリと refs
ディレクトリ)は重要なエントリです。これらは、Git の中核(コア)の部分に相当します。objects
ディレクトリはあなたのデータベースのすべてのコンテンツを保管します。refs
ディレクトリは、そのデータ(ブランチ)内のコミットオブジェクトを指すポインターを保管します。HEAD
ファイルは、現在チェックアウトしているブランチを指します。index
ファイルは、Git がステージングエリアの情報の保管する場所を示します。これから各セクションで、Git がどのような仕組みで動くのかを詳細に見ていきます。