作業ツリー、ワークツリー (work tree)

Git の管理下に入ったローカルのディレクトリツリーを 作業ツリー (work tree) と呼びます。 リポジトリに記録された内容を作業ツリーに展開する操作を チェックアウト (checkout) と呼びます。 git init コマンドなどで作成される .git/ ディレクトリが存在するディレクトリが、作業ツリーのルートになります。 Subversion や CVS では「作業コピー」と呼んでいました。

リポジトリ (repository)

変更履歴などを管理するリポジトリで、Git では必ずローカルディレクトリに存在します。 他のマシン上にあるリポジトリも、ローカルにあるリポジトリも対等の関係にあり、各リポジトリにコミットされた変更内容を互いにやりとりすることでプロジェクト全体の変更の一貫性を保ちます。 一般的には、ある一つのマシンのリポジトリを中央リポジトリとし、そこから最終的なプロジェクトの成果物を生成します。 リポジトリの実体は、作業ツリーのルートにある .git/ ディレクトリです。

ステージする (stage)

あるファイルを次回のコミット対象に含めることを、ファイルを ステージする (stage) といいます。 Perforce を使ったことがある人は、p4 edit などによる Perforce サーバへの変更通知と近い概念なので分かりやすいと思います。 Git では、git addgit rm コマンドでファイルを指定すると、その情報が Git のインデックス情報として登録され、次回のコミット対象となります。

ハンク (hunk)

ファイル内の連続した変更箇所のこと。 1 つのファイル内に連続した変更箇所が複数あれば、ハンクも複数存在することになります。 Git ではファイル単位で変更を追跡するのではなく、もっと細かいハンク単位で追跡します。 つまり、ファイル内の変更の一部だけをコミットするという作業が行えます。

チェックアウト (checkout)

リポジトリに格納されたあるリビジョンの内容を作業ツリーに展開し、ローカルファイルとして見えるようにすることを チェックアウトする (checkout) と言います。 また、チェックアウトされているブランチとは、現在の作業ツリーに反映されているブランチのことで、作業対象になっているブランチのことをいいます。

main ブランチ / master ブランチ

git init した後の初期状態で何かファイルをコミットすると、デフォルトで main というブランチが作成され、チェックアウトされた状態になります。 昔は master という名前が使われていましたが、アメリカの BLM 運動をきっかけに差別的で不適切な用語とされ main という名前に置き換えられました。

オブジェクトデータベース (object database)

Git プロジェクトのデータベース(オブジェクトデータベース)には、オブジェクト (object) という統一形式でデータが保存されています。 ファイルを表すブロブオブジェクト、ディレクトリを表すツリーオブジェクト、コミットを表すコミットオブジェクトなどが格納されます。 オブジェクトデータベースの実体は、作業ツリーにある .git/objects/ ディレクトリです。

ブロブオブジェクト (blob object)

ブロブオブジェクト は、Git で 1 つのファイルの内容を表現するオブジェクトで、オブジェクトデータベースで管理されます。

ツリーオブジェクト (tree object)

ツリーオブジェクト は、Git で 1 つのディレクトリの内容を表現するオブジェクトで、オブジェクトデータベースで管理されます。 ツリーオブジェクトには、ディレクトリ内のファイルやディレクトリのパス情報とオブジェクト ID が含まれています。

コミットオブジェクト (commit object)

コミットオブジェクト は、Git で 1 つのコミットの内容を表現するためのオブジェクトで、オブジェクトデータベースで管理されます。 コミットオブジェクトには、author(著者)、committer(記録者)、タイムスタンプ、コメントなどの情報が含まれています。