本書では、checkout
や branch
、remote
などの約30のコマンドを用いて、Gitの使い方を説明しています。
一方、Gitには低レベルの処理を行うためのコマンドも沢山あります。これは、Gitが元々は、完全にユーザフレンドリーなVCSというよりも、VCSのためのツールキットだったことが理由です。これらのコマンドは、UNIX流につなぎ合わせたり、スクリプトから呼んだりすることを主眼において設計されています。
これらのコマンドは、通常 配管(plumbing)'' コマンドと呼ばれています。対して、よりユーザフレンドリーなコマンドは
磁器(porcelain)'' コマンドと呼ばれています。
本書のはじめの9つの章では、ほぼ磁器コマンドだけを取り扱ってきました。 一方、本章ではそのほとんどで低レベルの配管コマンドを使用します。これは、Gitの内部動作にアクセスして、Gitが、ある処理を、なぜ、どうやって行うのか確かめるためです。 これら配管コマンドの多くは、コマンドラインから直接実行されるのではなく、新しくツールやカスタムスクリプトを作る際に構成要素となることを意図して作られています。
新規の、または既存のディレクトリで git init
を実行すると、Git は .git
というディレクトリを作ります。Git が保管したり操作したりする対象の、ほとんどすべてがここに格納されます。
リポジトリのバックアップやクローンをしたい場合、このディレクトリをどこかへコピーするだけで、ほぼ事足ります。
基本的にこの章では、全体を通して、 .git
ディレクトリの内容を取り扱います。
.git
ディレクトリの中は以下のようになっています。
$ ls -F1
HEAD
config*
description
hooks/
info/
objects/
refs/
これが git init
を実行した直後のデフォルトのリポジトリであり、デフォルトで表示される内容です。なお、環境によってはここにないファイルが表示されることもあります。
description
ファイルは、GitWebプログラムでのみ使用するものなので、特に気にしなくて大丈夫です。
config
ファイルには、プロジェクト固有の設定が書かれています。また、info
ディレクトリにはグローバルレベルの除外設定ファイル が格納されます。これは、.gitignoreファイルに記録したくない除外パターンを書く際に使用します。
hooks
ディレクトリには、クライアントサイド、または、サーバーサイドのフックスクリプトが格納されます。フックスクリプトについては ch08-customizing-git.asc で詳しく説明します。
そして、重要なのは残りの4項目です。具体的には、 HEAD
ファイル、 index
ファイル(まだ作成されていない)、 objects
ディレクトリ、 refs
ディレクトリです。
これらがGitの中核部分になります。
objects
ディレクトリにはデータベースのすべてのコンテンツが保管されます。refs
ディレクトリには、それらコンテンツ内のコミットオブジェクトを指すポインタ(ブランチ)が保管されます。HEAD
ファイルは、現在チェックアウトしているブランチを指します。index
ファイルには、Git がステージングエリアの情報を保管します。
以降の各セクションでは、Git がどのような仕組みで動くのかを詳細に見ていきます。