このブログは、旧・はてなダイアリー「檜山正幸のキマイラ飼育記 メモ編」(http://d.hatena.ne.jp/m-hiyama-memo/)のデータを移行・保存したものであり、今後(2019年1月以降)更新の予定はありません。

今後の更新は、新しいブログ http://m-hiyama-memo.hatenablog.com/ で行います。

gitの名前、あるいは命名・参照システム

gitが扱う主たるエンティティはオブジェクトだから、本質的にオブジェクトIDさえあればエンティティにアクセスできる。

オブジェクトの集まりというか容器としてリポジトリがあるが、リポジトリはオブジェクトではないのでオブジェクトIDが付いてない/使えない。リポジトリの名前は:

  1. ローカルリポジトリなら、ローカルファイルシステム(使っているコンピュータのファイルシステム)のディレクトリ名がリポジトリ名となる。
  2. インターネット上のリポジトリなら、リポジトリURIが付与されてるので、そのURIリポジトリ名となる。

リポジトリごとに参照システムを持つので、リポジトリごとの相対的な命名によりブランチとタグが決まる。ブランチ/タグの名前は:

だが、リポジトリ名がURLだと長いので、特定のリポジトリから見ての他のリポジトリの名前が当該リポジトリ命名システム(参照システム)内にある。それがリモート名。よって、ブランチ/タグの名前は、

  • リモート名/名前

リポジトリ内部は(つうか、全Gitオブジェクトの空間は)グラフ構造を持つので、適当なノードを基点としてパスによりノードへのアドレッシングができる。

  • 基点:ブランチかタグ、特にHEADブランチがよく使われる
  • パス記法: tree-ish, commit-ish

tree-ish, commit-ishは、XPathなんかと同じツリーに対するパス記法で、http://stackoverflow.com/questions/23303549/what-are-commit-ish-and-tree-ish-in-git が良い解説。commitノード、treeノード(ディレクトリ)、blobノード(ファイル)にアクセスできる。

ブランチ名、タグ名もパス記法の一部と考えれば、「リポジトリ名+パス記法」でリポジトリ内オブジェクトにアクセスできる。どんなオブジェクトでも少なくとも1つのリポジトリに所属している(登録されている)ので、必ずパスで表現可能なことになる。ただし、参照を持たずゴミになっているオブジェクトもある。

我々が使える命名・参照は、

  • オブジェクトID直接、命名のコントロールは出来ないが、無敵。インターリポジトリで使える。
  • パス記法、コミットオブジェクトとファイルシステムオブジェクトを区別すれば、概念的には自然。
  • reflog、通常の参照を持たないゴミ化オブジェクトも参照できる可能性がある。