本記事は『動かして学ぶ!Git入門』の「Chapter1 Gitの基本」を抜粋したものです。掲載にあたって一部を編集しています。
バージョン管理システムとは
ソフトウェアを開発していると、プログラムにバグを入れてしまって以前のファイルの状態に戻したくなったり、そうでなくても以前のファイル内容を見たくなったりすることがあります。そんなときに便利なのがバージョン管理システムです。
バージョン管理システムとは、ファイルの履歴を管理するシステムです。プログラマは、ファイルのこの状態をとっておきたいと思ったときに、そのファイルの内容をバージョン管理システムに入れます。この操作をチェックインといいます。このチェックインされた状態が、1つのバージョンになります。バージョンを入れる場所をリポジトリと呼びます(図1.1)。

適当なときにチェックインしておくことで、後でその状態に戻したりできます。バージョン管理システムに入っているバージョンを取り出すことをチェックアウトといいます(図1.2)。

Gitでのバージョン管理
Gitにおけるバージョンは、ファイルではなくて、あるディレクトリを根とする木(ディレクトリツリー)です。Gitではチェックインすることをコミットするといいます。
バージョン管理の対象としているディレクトリで、現在のディレクトリツリーの状態をコミットすると、そのディレクトリツリーが1つのバージョンとなってリポジトリに入ります。Gitではこの1つのバージョンをコミットと呼びます。つまり、コミットする(動詞)と、コミット(名詞)が1つ作られるのです(図1.3)。

フォルダとディレクトリ
ディレクトリは、macOSやWindowsではフォルダと呼ばれます。ディレクトリツリーは、そのフォルダの中に入っているすべてのフォルダやファイルの全体です。図1.4の左のようなフォルダの構造は、右の形のディレクトリツリーで表されます。

Gitのディレクトリ構成
Gitでバージョン管理をしているプロジェクトのディレクトリ構成は図1.5のようになります。

作業ツリーは、開発をしているディレクトリツリーです。プログラマがプログラムを編集したりコンパイルしたりする場所です。Gitは、作業ツリーのトップのディレクトリに.gitというディレクトリを作って、バージョン管理に必要な情報をここに入れます。その中にある大事なものとして、先ほど出てきたリポジトリと、ステージがあります(ステージは、ステージングエリアとか、インデックス、キャッシュなどとも呼ばれます。本書では動詞「ステージする」に合わせて簡単に「ステージ」と呼ぶことにします。)。
ステージは、作業ツリーとリポジトリの間にある領域です。プログラマはまず、作業ツリーの内容をここにコピーします。この操作をステージするといいます。必要なファイルをすべてステージしてから、コミットします。そうすると、ステージの内容がそのコミットの内容になります。作業ツリーをそのままコミットするのでなく、このように一旦ステージに準備してからコミットするので、作業ツリーのファイルのうちコミットするものを選ぶこともできます。
逆にチェックアウトするときにも、ステージを経由します。チェックアウトしたいコミットを指定してチェックアウトすると、そのコミットがステージにコピーされ、それがまた作業ツリーにコピーされます。これによってファイルが取り出されます。
分散バージョン管理システム
Gitは分散バージョン管理システムと呼ばれます。分散バージョン管理システムとは、同じプロジェクトのリポジトリをネットワーク上に複数置いて管理できるバージョン管理システムのことです。複数人が同じプロジェクトで開発する際に便利です。Gitではよく図1.6のような構成で分散バージョン管理を行ないます。

この構成では、リポジトリが3つあります。開発者それぞれのコンピュータにあるリポジトリと、サーバにあるリポジトリです。サーバには普通、裸のリポジトリという、ステージや作業ツリーを持たないリポジトリを置きます。開発者がそこで開発をしないためです。
また、図1.7の構成も一般的です。この構成では、中央リポジトリに書き込めるのは管理者だけになります。

このようにGitでは、プロジェクトの要求に応じたさまざまなリポジトリの配置が可能です。
Gitのコマンドとヘルプ
Gitはgitというコマンドで操作します。このコマンドにはたくさんのサブコマンドがあります。たとえばサブコマンドhelpを使って、
$ git help
とすれば、使い方の説明が表示されます。また、helpの後にサブコマンドを指定すると、そのサブコマンドの説明を見ることができます。たとえばgit configというサブコマンドがあります。このサブコマンドは、
$ git config 引数…
として使います。そのヘルプは、
$ git help config
とすると見ることができます。
gitのサブコマンドはGitコマンドと呼ばれます。つまりhelpやconfigはGitコマンドです。
演習
git helpコマンドを実行してヘルプを表示させてみましょう。