Git --fast-version-control
Chapters ▾

9.1 Gitの内側 - 配管(Plumbing)と磁器(Porcelain)

配管(Plumbing)と磁器(Porcelain)

本書は、checkoutbranchremote などの約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 がどのような仕組みで動くのかを詳細に見ていきます。