- gitのダメさ - (新) 檜山正幸のキマイラ飼育記 メモ編 (ダメだ)
- gitのクリア化 - (新) 檜山正幸のキマイラ飼育記 メモ編 (クリアにしよう)
というわけで適正化。
まず、「ブランチ」って言葉:
- リポジトリの全コミットグラフをハッセ図として、時間方向の順序を入れる。この順序をリビジョン順序と呼ぶ。リビジョン順序は、参照による親子順序の逆順序になる。
- リビジョン順序の極大元をコミットグラフのヘッドまたはリーフと呼ぶ。空でないコミットグラフにはリーフが1つ以上存在する。
- リビジョン順序で2つ以上の後者〈successor〉を持つコミットノードを分岐コミットノードと呼ぶ。
- リビジョン順序の極小元をコミットグラフのルートと呼ぶ。空でないコミットグラフには、ルートが1つ以上存在する。
- リビジョン順序による下方集合を色々な呼び名がある。コミット{まで}?の歴史、履歴、Ancestor-Or-Self集合、過去集合など。
- リビジョン順序による上方集合は Descendant-Or-Self集合、未来集合。
- コミット a の過去集合 と コミット b の過去集合の集合差を b から a へのブランチ集合と呼ぶ。通常の「ブランチ」はおそらくこの意味。
- ブランチ集合における、リビジョン順序の最大元をブランチ集合のヘッドと呼ぶ。
- ブランチ集合における、最大下界である b をブランチ集合の親と呼ぶ。親はブランチ集合に入らない。
- ブランチ集合の親が分岐コミットノードとは限らない。分岐ノードでないなら早送り状態。
- ブランチ集合のヘッドを指すラベルを、そのブランチのブランチラベルと呼ぶ。
- ブランチ集合があると、そのラベル、ヘッドコミット、ヘッドコミットのファイルツリー、ヘッドコミットのワーキングツリーのことも「ブランチ」と呼ぶかもしれない。
「ヘッド」って言葉:
- コミットグラフのヘッド集合〈the set of heds of a commit graph〉
- コミットグラフのひとつのヘッド〈a hed of a commit graph〉
- ラベル HEAD が指すコミット、これはヘッドである必要はない。
- ラベル HEAD が指すコミットのファイルツリー、またはワーキングツリー
- ブランチ集合のヘッド、これは常に単一。またはヘッドを指すラベル。
- 複数のブランチラベルのどれか。
- HEAD は CURRENT カーソルとすべきだった。
push/pull、プルリクエスト関係:
- sendとreceiveが対称性がある。send=push, receive=fetch
- send/receiveされる対象物(目的語)は、コミットグラフのサブグラウトと付随ファイルツリー達。つまり、オブジェクトグラフのサブグラフ。
- send/receiveされる対象物を転送サブグラフと呼ぶことにする。転送サブグラフはオブジェクトグラフのサブグラフでラベルも含まれる。
- 転送サブグラフは、シングルヘッドかつヘッドラベル付きであり、シングルルートであり、ルートの親参照があり、かつルートの親が相手グラフに実在する。という条件付き。
- サブグラフ転送により、相手〈デスティネーション〉グラフは必ず成長する(追記が発生する)。この成長は接ぎ木〈grafting〉である。
- サブグラフ転送は、ソース側グラフのサブグラフ選択と、デスティネーション側グラフの接ぎ木操作からなる。
DAGの理論:
- 単一の全体集合 X の部分集合をノード集合とするすべてのノード・エッジ色付きDAGの集合(類)を考える。
- その類を CDAG(X) とする。"(Node-Edge) Colored DAGs on X"
- グラフの融合和が基本演算。特殊ケースとして、接ぎ木(単元集合が接合部)、直和(空集合が接合部) がある。
- ダングリングエッジが出たコミットグラフに対して融合和を定義する。
- ファイルツリーはコンフリクトしたものも認める。
- グラフのノードやノードセットを選択〈セレクト〉する方法を系統的に考える。
- 通常の集合演算以外に、集合差と対称差を使う。
- 参照先をすべて含む完全グラフと、ダングリングを持つ不完全グラフ。
低水準コマンドと概念:
- git hash-object
- echo hello | git hash-object --stdin
- git rev-parse
- git name-rev
- git describe
- git cat-file file-ish
- git cat-file -t object
- git ls-tree tree-ish
- git checkout tree-ish -- file-path
- git checkout --orphan new_branch
- git commit --allow-empty -m "init project"
- 概念: detached HEAD
- 概念: グラフの連結性とみなしごブランチ
- 概念: ブランチ分解とカバレッジ
- 概念: 2つのコミットグラフの共通部分と差分、対称差(独自部分)