Git
章 ▾ 第2版

10.1 Gitの内部構造 - 配管と陶器

この章には、かなり前の章からスキップして来た方も、この本を順番に読み進めてここにたどり着いた方もいらっしゃるかと思います。いずれにしても、ここではGitの内部構造と実装について説明します。この情報を理解することは、Gitの便利さと強力さを理解する上で非常に重要であることがわかりましたが、初心者にとっては混乱を招き、不必要に複雑になるという意見もありました。そのため、この議論を本の最後の章にすることで、学習プロセスの初期段階または後で読むことができるようにしました。どのタイミングで読むかは、読者の判断にお任せします。

さて、それでは始めましょう。まず、まだ明らかでない場合は、Gitは基本的に、その上にVCSのユーザーインターフェースが書かれたコンテンツアドレス可能なファイルシステムです。これの意味については、少し後で詳しく説明します。

Gitの初期(主に1.5以前)には、ユーザーインターフェースは、洗練されたVCSよりもこのファイルシステムを強調していたため、はるかに複雑でした。ここ数年で、UIは他のどのシステムよりもクリーンで使いやすくなるように洗練されてきました。しかし、複雑で習得が難しい初期のGit UIについてのステレオタイプが残っています。

コンテンツアドレス可能なファイルシステム層は驚くほどクールなので、この章では最初にそれについて説明します。次に、トランスポートメカニズムと、最終的に対応する必要があるかもしれないリポジトリのメンテナンス作業について学びます。

配管と陶器

この本では主に、checkoutbranchremoteなど、30個程度のサブコマンドを使ったGitの使い方を説明します。しかし、Gitは当初、完全なユーザーフレンドリーなVCSではなく、バージョン管理システムのツールキットとして設計されたため、低レベルな作業を行うサブコマンドが多数存在し、UNIX風に連結したり、スクリプトから呼び出したりできるように設計されています。これらのコマンドは一般的にGitの「配管(plumbing)」コマンドと呼ばれ、よりユーザーフレンドリーなコマンドは「陶器(porcelain)」コマンドと呼ばれています。

すでにお気づきかもしれませんが、この本の最初の9章では、ほぼ専ら陶器コマンドを扱っています。しかし、この章では、Gitの内部動作にアクセスでき、Gitがなぜそのように動作するのかを理解するのに役立つ、より低レベルな配管コマンドを主に扱います。これらのコマンドの多くは、コマンドラインで手動で使用するように設計されているのではなく、新しいツールやカスタムスクリプトの構成要素として使用するように設計されています。

新しいディレクトリまたは既存のディレクトリでgit initを実行すると、Gitは.gitディレクトリを作成します。このディレクトリには、Gitが保存および操作するほぼすべてのものが格納されます。リポジトリをバックアップまたはクローンする場合、この単一のディレクトリを別の場所にコピーすれば、必要なもののほぼすべてが揃います。この章全体では、基本的にこのディレクトリ内で見ることができるものについて説明します。以下は、新しく初期化された.gitディレクトリの典型的な構造です。

$ ls -F1
config
description
HEAD
hooks/
info/
objects/
refs/

Gitのバージョンによっては、追加のコンテンツが表示される場合がありますが、これは新しいgit initリポジトリであり、デフォルトで表示されるものです。descriptionファイルはGitWebプログラムでのみ使用されるため、心配する必要はありません。configファイルにはプロジェクト固有の設定オプションが含まれており、infoディレクトリには.gitignoreファイルで追跡したくない無視パターンに関するグローバルな除外ファイルが保存されています。hooksディレクトリには、クライアント側またはサーバー側のフックスクリプトが含まれており、これらについてはGitフックで詳しく説明します。

これにより、4つの重要なエントリが残ります。HEADファイル、(まだ作成されていない)indexファイル、そしてobjectsrefsディレクトリです。これらはGitの中核となる部分です。objectsディレクトリにはデータベースのすべてのコンテンツが保存され、refsディレクトリにはそのデータのコミットオブジェクトへのポインタ(ブランチ、タグ、リモートなど)が保存され、HEADファイルは現在チェックアウトしているブランチを指し、indexファイルにはGitがステージングエリア情報を保存します。Gitがどのように動作するかを理解するために、これらの各セクションを詳しく見ていきましょう。

scroll-to-top