用語

ここで紹介していない用語については 公式ドキュメントの用語集 を参照ください。

リポジトリ(repository)

リポジトリはGitのバージョン管理の対象になるファイルの中身、ディレクトリ、更新履歴などが保存される場所です。 変更履歴とバックアップの保管場所のことだと思っていれば特に問題ありません。

実態はGitで管理しているディレクトリに作成される .git という隠しフォルダです。

Tip

リモートリポジトリ(remote repository)とローカルリポジトリ(local repository)

サーバー上にあるリポジトリがリモートリポジトリ、自分のPCにあるのがローカルリポジトリです。
基本的にリモートから各自のPCに複製して作業して、公開・共有する変更履歴をリモートに集積し、他人の変更もリモートから持ってきます。(ローカルとローカル間のやり取りも可能です。)

Tip

ベアリポジトリ(bare repository)とノンベアリポジトリ(non-bare repository)

作業ディレクトリをもたないのがベアリポジトリ、もつのがノンベアリポジトリ。
一般的にリモートリポジトリはベアリポジトリでローカルリポジトリはノンベアリポジトリ。

作業ディレクトリ(working directory)

実際にファイルが置かれていて、ファイルの追加・変更を行う場所です。
作業ディレクトリ、ワークツリー、ワーキングディレクトリなどと呼ばれます。

ステージングエリア(staging Area)

作業ディレクトリで変更したファイルをリポジトリに登録する前に一時的に登録する場所です。
ここに登録することをステージングといい、ステージングされたファイルのみリポジトリへの登録の対象となります。
実態は .git に含まれる index というファイル。
ステージングエリア、インデックスなどと呼ばれます。

コミット(commit)

ステージングエリアエリアに登録された変更をリポジトリに登録する操作のこと。
また、リポジトリに登録された変更履歴自体を コミット (または リビジョン )と呼ぶ。
コミットは親となる(変更元)のコミットの情報を保持しており、コミットの履歴は以下のようにコミットを丸、親と子の関係を線で示すことが多い。
../_images/0103.png

コミット履歴のイメージ

注釈

わかりやすくするために各コミットをA~Dで示しているが、実際にはコミットはハッシュという40桁の値で識別される。

スナップショット(snapshots)

リポジトリに保存されるコミット時の作業ディレクトリの状況。
Gitはこの作業ディレクトリのスナップショットを保存して、そのスナップショットに対してタグをつけたり、任意のスナップショットに戻ったり、比較したりするシステムと考えればよい。
../_images/011.png

スナップショット

ブランチ(branch)

開発の流れを分岐させてメインの流れに影響を与えずに開発するための機能。
また、その開発の枝分かれした流れを示す名前としてもつかわれる。(ただしブランチの実態はただ特定のコミットを指すだけのポインタであり、繋がりの情報はコミットが保持している。)
Gitでの管理を始めると、そのプロジェクトは最初からブランチを1つ持っている。(一般的に mainmaster という名前で作られます。)
新たにブランチを作成することを「ブランチを切る」といいます。
../_images/0202.png

ブランチのイメージ

注釈

上の図でいうとブランチはコミットDを指している main とコミットCを指している develop のふたつ。
たとえばブランチ develop についての変更の履歴はA→C、 develop ではA→B→C→Dとなるが、ブランチ自体はこの情報を持たず、ただコミットCとDをそれぞれを指しているだけである。指されたコミットが親の情報をもっているためそれを辿っていくことで各ブランチの変更の履歴を把握できる。
ざっくりとしたイメージで言えば分岐した作業の履歴の先頭を指すだけのものと考えていい。

ハンク(hunk)

変更のかたまり。
Gitでは変更はファイル単位ではなくファイル内の変更箇所単位で認識している。
ハンク単位でコミットすることも可能。