gitの名前、あるいは命名・参照システム
gitが扱う主たるエンティティはオブジェクトだから、本質的にオブジェクトIDさえあればエンティティにアクセスできる。
オブジェクトの集まりというか容器としてリポジトリがあるが、リポジトリはオブジェクトではないのでオブジェクトIDが付いてない/使えない。リポジトリの名前は:
- ローカルリポジトリなら、ローカルファイルシステム(使っているコンピュータのファイルシステム)のディレクトリ名がリポジトリ名となる。
- インターネット上のリポジトリなら、リポジトリに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つのリポジトリに所属している(登録されている)ので、必ずパスで表現可能なことになる。ただし、参照を持たずゴミになっているオブジェクトもある。
我々が使える命名・参照は、