Chapter 11. GIT 用語集

代替オブジェクトDB(alternate object database)
代替メカニズム(alternates mechanism)により、リポジトリ は そのオブジェクトDBの一部を、他のオブジェクトDBから継承 することができます。この継承したものを "代替" オブジェクトDBといいます。
裸のリポジトリ(bare repository)
裸のリポジトリとは、通常 .git の拡張子を持つ ディレクトリ で、 リビジョン管理下にあるチェックアウトしたファイルをローカルに持たないディレクトリです。 通常 .git サブディレクトリ に隠れている git の管理ファイル全てが repository.git ディレクトリに直接存在し、 他のファイルは存在せず、チェックアウトもされていません。 通常、公開リポジトリを出版する人は、裸のリポジトリを作成します。
blob object
タイプ付けされていないオブジェクト, つまりファイルの中身です。
ブランチ(branch)
"ブランチ" はアクティブな開発ラインのことです。ブランチ上の最新のコミットは そのブランチの先端(tip)として参照されます。 ブランチの先端はブランチのヘッド(head)により参照され、 ブランチ上でさらに開発が進むと、先に進められます。 1つの git リポジトリは任意の数のブランチを追跡できますが、 作業ツリー はそれらブランチの1つ("カレント(current)" または"チェックアウト"ブランチ)と関連づけられ、HEADがその ブランチを指し示しています。
キャッシュ(cache)
索引(index) に対する廃語です。
チェーン(chain)
オブジェクトのリストのことで、そのリスト内の各オブジェクトが 後続する参照を含んでいるものを指します。(後続する参照とは、例えば コミットの場合、その親(parents)のことです)
チェンジセット(changeset)
"コミット" に対する BitKeeper/cvsps 側の用語です。 git は変更ではなく状態を格納する為、git で "チェンジセット" という用語を 使用するのは実際のところ意味がありません。
チェックアウト(checkout)
作業ツリーの全てもしくは一部を オブジェクトDB にある ツリーオブジェクト もしくはブロブ(blob)の内容で 更新する操作のことです。 もしも作業ツリー全体が新しい ブランチ を 指しているならば インデックスHEAD も更新します。
チェリーピック(cherry-picking)
SCMの用語では、"チェリーピック(cherry pick)" は 一連の変更(一般にはコミット)の一部を選択し、異なるコードベースの先頭に 新しい一連の変更としてそれらを記録することです。GITでは "git cherry-pick" コマンドによってコミットによる変更を抜き出し、 現在のブランチの先端に新しいコミットとして記録する操作のことです。
クリーン(clean)
作業ツリー がクリーンであるとは、 その作業ディレクトリが現在のヘッド(head)が参照する リビジョンと一致している場合を言います。 "dirty" も参照してください。
コミット(commit)

名詞:git の履歴内のある1点です。プロジェクトの全履歴は 相互に関連したコミットの集合により表現されています。git では"コミット"という言葉を 他のリビジョン管理システムが使用する "リビジョン" または "バージョン"と同じ意味で 使用することがあります。また、コミットオブジェクト の略称として使われることもあります。

動詞:プロジェクト状態の新しいスナップショットを git の履歴に格納する操作のことで、 索引(index)の現在の状態を現わす新しいコミットを作成し、 新しいコミットを指し示すように HEAD の位置を進めます。

コミットオブジェクト(commit object)
特定リビジョンの情報を含んだオブジェクトのことです。 コミットオブジェクトは親(parents)、コミットした人、著者、日付、 格納されているリビジョンの最上位のディレクトリと一致する ツリーオブジェクト(tree object)、などの情報が含まれています。
gitの中核(core git)
gitの基礎データ構造とユーティリティのこと。 ソースコード管理ツールとしての中核部分のことです。
DAG
有向非巡回グラフ。コミットオブジェクト は有向非巡回グラフ を形成します。何故ならコミットは(方向付けされた)親を持ち、 コミットオブジェクトのグラフは非巡回(つまり、始まりと終わりが 同じオブジェクトとなるような チェーン(chain) が存在しないからです)
遊離オブジェクト(dangling object)
到達不能なオブジェクトの内、他のどの到達不能オブジェクトからも 到達不能なオブジェクトのことです。つまり、リボジトリ内のどの参照と どのオブジェクトからも参照されていないオブジェクトのことです。
分離したHEAD (detached HEAD)
通常 HEAD はブランチ名を保管します。しかし、gitは特定のブランチの 先端(tip)ではない任意のコミットをチェックアウトすることもできます。 その状態のことを分離した(detached)といいます。
ディレクトリキャッシュ(dircache)
かなり時代遅れ な用語です。索引(index) を参照。
ディレクトリ(directory)
"ls" によって得られるリストのことです :-)
汚れている(dirty)
作業ツリー が "汚れている(dirty)" とは、 現在のブランチコミットされていない 変更が作業ツリー内に含まれていることをいいます。
エント(ent)
ギークが好んで使う "tree-ish" の同義語です。 詳しい説明は`http://ja.wikipedia.org/wiki/%E3%82%A8%E3%83%B3%E3%83%88`を参照してください。 人々を混乱させない為にも、この言葉の使用はさけてください。
有害なマージ(evil merge)
有害なマージ(evil merge)とは、どのにも現れない 変更が行われているマージのことです。
早送り(fast forward)
早送り(fast forward) とは特殊なタイプのマージのことで、 マージにより得られる結果が作成済みの子孫と一致するマージのことをいいます。 このような場合、新しいマージコミットは作成されずに、 そのリビジョンを指すように更新されます。 早送り(fast forward)はリモートリポジトリ追跡ブランチ の場合に良く発生します。
フェッチ(fetch)
ブランチ(branch)を取得するとは、ブランチの リモートリポジトリからヘッドの参照(head ref) を取得し、ローカルのオブジェクトDBに存在しないオブジェクトを 探し出し、それらを取得することをいいます。git-fetch(1) も参照してください。
ファイルシステム(file system)
Linus Torvalds は元々はユーザ空間のファイルシステム、つまり、ファイルと ディレクトリを保持する構造基盤として git を設計していました。 その性質により、gitの効率性とスピードが保障されています。
gitアーカイブ(git archive)
リポジトリ の同義語です。(archユーザが使用します)
接ぎ木(grafts)
接ぎ木(grafts)とは、コミットに関する嘘の祖先情報を記録することで関連のない2つの開発ラインを つなぎ合わせることをいいます。この方法により、コミット作成時の記録とは違うコミットの の集合を、コミットのの集合であるかのように git に 行動させることができます。 この情報は .git/info/grafts ファイルにより設定します。
ハッシュ(hash)
git の文脈中では、オブジェクト名と同義です。
ヘッド(head)
ブランチの先端にあるコミットへの名前のついた参照 のことです。ヘッドは通常 $GIT_DIR/refs/heads/ の下に保管されますが、 例外として参照が圧縮(pack)されることもあります。(git-pack-refs(1) 参照)
HEAD
現在の ブランチ です。より詳しくは、 作業ツリーは通常、HEAD が参照する状態から導き出されます。 HEAD は通常、リポジトリ内の1つの ヘッド(head) を参照します。 例外として、分離したHEAD(detached HEAD)を使用している場合があり、 その場合は、任意のコミットを参照します。
head ref
ヘッド(head)と同義です。
フック(hook)
git コマンドのいくつかは実行中にオプションでスクリプトを呼び出すことができ、 開発者の機能追加やチェックの手助けをします。 通常、フックは事前検証を行い処理を中止する為や操作が完了した後に知らせる為に 用いられます。フックスクリプトは $GIT_DIR/hooks/ ディレクトリに保管されおり、 ファイル名から`.sample`を削除するだけで利用可能になります。 古いバージョンのgitではスクリプトを実行パーミッションを付与することで 利用可能になります。
索引(index)
索引はファイルとその状態の集合であり、その中身はオブジェクトとして格納されています。 作業ツリーの内容を保管しているバージョンです。 実は、索引は2つないし2つの作業ツリーのバージョンを含むことも可能で、 マージするときにそのような状態となります。
索引エントリ(index entry)
索引(index)内に格納された特定のファイル情報のことです。 索引エントリはマージが開始されているが 完了していない場合(すなわち、索引がファイルの複数の バージョンを含んでいる場合)には、マージが取り消されていることもあります。
master
デフォルトの開発ブランチのことです。 git リポジトリ を作成するといつでも "master" という名前のブランチが作成され、アクティブなブランチと なります。たいてい master ブランチにはローカルの開発を含みますが、 これは純粋に慣例によって行われていることであり必須ではありません。
マージ(merge)
動詞:他のブランチ(外部リポジトリのブランチも可) の内容を現在のブランチに届けることをいいます。 外部リポジトリからマージをする場合は、はじめにリモートブランチから 変更を取得(fetch)され、その結果が現在のブランチにマージされます。 この取得とマージ操作の組み合わせはpullと呼ばれています。 マージはそのブランチが分岐してから行われた変更を特定し、以降の変更をすべて 適用する作業を全自動で行います。コンフリクトが発生した場合は、 マージを完了する為に手作業の対処が必要になります。 +名詞:マージが早送り(fast forward)にならない場合、 マージは新しいコミットを作成し、 そのコミットはマージした結果を表現し、その親(parents)は マージされたブランチの先端となります。 このコミットは "merge commit" と呼ばれ、単に "merge" と呼ばれることもあります。
オブジェクト(object)
git のストレージ構成単位です。オブジェクトはその中身の SHA1 により 一意に特定されます。その結果、オブジェクトは不変となります。
オブジェクトDB(object database)
"object" の集合を保管します。個々のオブジェクト(object)は 自身のオブジェクト名によって特定されます。 オブジェクトは通常 $GIT_DIR/objects/ に存在します。
オブジェクトの識別子(object identifier)
オブジェクト名と同義。
オブジェクト名(object name)
オブジェクトのユニークな識別子です。 Secure Hash Algorithm 1 を使用して得られるオブジェクトのハッシュ(hash) であり、通常は40桁の16進数で表されます。
オブジェクトタイプ(object type)
識別子 "コミット", "ツリー", "タグ" または "ブロブ(blob)" の1つであり、 オブジェクト(object)のタイプを記述します。
タコ(octopus)
2つ以上のブランチマージすること。 または、知的な捕食動物を意味します。
origin
デフォルトの上流リポジトリのことを指します。 たいていのプロジェクトは少なくとも1つの追跡している上流プロジェクトがあります。 デフォルトで origin はその上流プロジェクトの追跡に使用されます。 上流の更新をすると、origin/name-of-upstream-branch の名前のリモートの 追跡ブランチに取得されます。 リモート追跡ブランチは git branch -r にて参照できます。
パック(pack)
オブジェクトの集合で、(ディスクスペースの節約とオブジェクトを効果的に伝達させる為に) 1つのファイルに圧縮されたものをいいます。
パック索引(pack index)
パック内のオブジェクトの識別子とその他情報の一覧のことで、 効果的にパックの中身にアクセスする為の手助けをします。
親(parent)
コミットオブジェクト内に含まれる開発ライン内の論理的な祖先 のことです(親が空の場合もあります)。
つるはし(pickaxe)
つるはし(pickaxe)という用語は指定したテキスト文字列を追加または削除 した変更を選択する手助けをする diffcore の動作オプションです。 —pickaxe-all オプションは指定したテキストラインを追加または削除した チェンジセットを全て表示する為に用います。 git-diff(1) 参照。
配管(plumbing)
gitの中核(core git) に対する可愛い呼び名です。
磁器(porcelain)
gitの中核(core git)に依存するプログラムと プログラムの一式に対する可愛い呼び名です。 gitの中核に対する高レベルなアクセスを提供します。 磁器(porcelain)は配管(plumbing)よりも SCMらしいインターフェースを提供します。
pull
ブランチを pull するとは、ブランチを取得し、 マージすることをいいます。git-pull(1) 参照。
プッシュ(push)
ブランチを push するとは、リモートリポジトリ からブランチのヘッド参照を取得し、 ローカル側のヘッド参照の直接の祖先であるかを確認し、 祖先である場合はローカルのヘッド参照から到達可能で リモートリポジトリに存在しない全てのオブジェクトをリモートの オブジェクトDBに設置し、 リモートのヘッド参照を更新します。 リモートのヘッドがローカルヘッドの祖先でない場合は、push は失敗します。
到達可能(reachable)
あるコミットの祖先全ては、そのコミットから "到達可能" であるといいます。 より一般的に、タグコミットツリーblobsが一方から他方につながっている場合、 そのオブジェクトがもう一方のオブジェクトから到達可能であるといいます。
リベース(rebase)
あるブランチの一連の変更をことなるベースに適用し、 ブランチのヘッドをその結果位置にリセットすること。
参照(ref)
SHA1 の 40バイトの16進数表現、または特定のオブジェクト を表す名前のことです。これらは $GIT_DIR/refs/ に格納されることがあります。
参照ログ(reflog)
参照ログ(reflog) は参照に関するローカルの "履歴" です。 言い換えると、このリポジトリの3つ前のリビジョンは何であったかや、 昨日のPM9:14時点ではこのリポジトリはどの状態にあったかなどを 教えてくれるものです。詳細は git-reflog(1) を参照してください。
参照仕様(refspec)
"参照仕様(refspec)" はリモートの参照とローカルの参照とのマッピングをする為に フェッチ(fetch)プッシュ(push) によって使用されます。 これらはコロン(:)で分割した <src>:<dst> の形式で、先頭に + 記号を付けることもあります。 例えば:git fetch $URL refs/heads/master:refs/heads/origin は "$URL にある master ブランチヘッド をつかみ、 それを自身のリポジトリ内の origin ブランチのヘッドに保管する" ことを意味します。 また git push $URL refs/heads/master:refs/heads/to-upstream は "自身のリポジトリ内の master ブランチのヘッドを $URL の to-upstream ブランチとして 発行する" ことを意味します。git-push(1) も参照してください。
リポジトリ(repository)
参照(refs)と参照から到達可能な全オブジェクトを 含んだオブジェクトDBの集合です。 1つ以上の 磁器(porcelains) のメタデータを含むこともあります。 リポジトリは代替メカニズムにより 他のリポジトリとオブジェクトDBを共有することもできます。
解決する(resolve)
自動 マージ に失敗した箇所を手作業で修復する 作業のことです。
リビジョン(revision)
オブジェクトDB 内に格納されたファイルとディレクトリ の特定の状態。これは コミットオブジェクト によって 参照されます。
巻き戻す(rewind)
開発の一部を破棄することです。例えば、ヘッド(head) を 以前の リビジョン に割り当てることです。
SCM
ソースコード管理(ツール)。
SHA1
オブジェクト名と同義。
浅いリポジトリ(shallow repository)
浅いリポジトリとは一部のコミットが リポジトリ内に存在していない不完全な履歴状態のリポジトリのことを言います。 (コミットオブジェクト内に親の情報が記録されていたとしても gitはこれらのコミットが親を持っていないふりをします) 浅いリポジトリは巨大プロジェクトにて最近の履歴にだけ興味があるような場合に 役に立ちます。git-clone(1)—depth オプションを付けることで 作成でき、git-fetch(1) により後から履歴をより深くすることもできます。
symref
シンボル参照:SHA1 の ID 自身を持つ代わりに、 ref: refs/some/thing の形式で参照先を持つ参照です。 参照されると再帰的に逆参照します。 HEAD は symref の典型例です。 シンボル参照は git-symbolic-ref(1) コマンドにより操作します。
タグ(tag)
タグ(tag)コミットオブジェクト を 指し示す 参照(ref) のことです。ヘッド(head) と異なり、 タグは コミット によって変更されることはありません。 タグ(タグオブジェクトではありません)は $GIT_DIR/refs/tags/ 内に 保管されます。git の タグは List tag とは無関係です (Lisp tagは、 git の資料内では オブジェクトタイプ と呼んでいます)。 タグはコミットの祖先の 繋がり(chain) 内の特定の位置に印を つけるために良く使用されます。
タグオブジェクト(tag object)
他のオブジェクトを指し示す 参照(ref) を含んでいる オブジェクト のことです。これは、コミットオブジェクト のようにメッセージを含むこともできます。また、署名(PGP) を含む "署名付きタグオブジェクト" と呼ばれるものもあります。
トピックブランチ (topic branch)
各開発ラインを識別する為に開発者が使用する通常の git ブランチ。 ブランチはとても容易で安価に利用できるため、明確なコンセプトや小さく付加的な 関連する変更を含んだ小さなブランチをいくつか作成することが望ましいです。 (訳注:日本語がおかしいので、訳をみなおす必要がある。以下に原文を載せます。 A regular git branch that is used by a developer to identify a conceptual line of development. Since branches are very easy and inexpensive, it is often desirable to have several small branches that each contain very well defined concepts or small incremental yet related changes.
追跡ブランチ (tracking branch)
他の リポジトリ からの変更を追跡する為に使用される 通常の git ブランチ。 追跡ブランチは直接の変更またはローカルのコミットは含むべきではありません。 追跡ブランチは通常、Pull 時に最も役に立つ 参照 です。: 参照仕様
ツリー (tree)
依存している blob と ツリーオブジェクトも含めた 作業ツリー または ツリーオブジェクト全体。 (つまり、作業ディレクトリの格納時の表現)。
ツリーオブジェクト (tree object)
blob または ツリーオブジェクトへの参照と、ファイル名とモードの一覧を含んだ オブジェクトツリーディレクトリ と等価。
ツリーっぽい (tree-ish)
コミットオブジェクトツリーオブジェクト、 あるいは タグオブジェクト を指し示している 参照。 (訳注:ツリーっぽくない参照は blob オブジェクトへの参照)
マージされていない索引 (unmerged index)
マージされていない 索引エントリ を含む 索引(index)
到達不可能なオブジェクト (unreachable object)
ブランチタグ、その他の参照から 到達可能 ではない オブジェクト
上流ブランチ(upstream branch)
マージを行う(もしくはリベースを行う) ディフォルトのブランチ のこと branch.<name>.remote と branch.<name>.merge によって設定される。 もしA'の上流ブランチが'origin/B'なら"'Aorigin/B を追跡している"と言う
作業ツリー (working tree)
実際にチェックアウトされたファイルのツリー。通常、作業ツリーは HEAD と まだコミットしていないローカルの変更とを 合わせた内容に等しいです。