「もうGitは怖くない: 自信を持って使いたいあなたへ」は、「タイトルがミスリーディングで良くない」とか、「よけい怖くなる」とかの反応がありました。「怖い」という感情は個人差があるからしょうがないですね。タイトルはおそらく、「Gitの解剖学」あたりが受け入れられ易かったのかな。それとも、「ほんとうは怖いGit」?
僕自身が気になったことは2点で:
- 長過ぎる。読むのが大変。
- 男女の裸の写真が入っている。
裸の写真2枚は、いちおうストーリーを補完しているのでイイとしましょう。しかしあの長さは、たぶん自分でも読み返さないと思います。でも、書いてある内容を後で参照はしたいので、要点だけを箇条書きにまとめておきます。
- Gitは内部構造がまる見え。.git/ディレクトリを覗けばいい。
- Get http://www.chimaira.org/misc/git-quest-kit.shar . See https://github.com/m-hiyama/git-quest-kit .
- Gitオブジェクトとは、ID付きのバイト列データ。
- オブジェクトIDは40桁文字列。
- 「オブジェクトのID ←→ オブジェクトの中身」と1:1に対応。IDの衝突は心配すんな。
- .git/objects/ の下にオブジェクト達が入っている。
- オブジェクトは消せない、変更できない。保存後は永久凍結で、オブジェクトは増える一方。
- 消えるのではなくて、探しにくくなるだけ。ほんとに消すのは大変。
- オブジェクトデータベースはグラフ構造を持つ。オブジェクトIDによる参照が有向辺となる。
- コミットオブジェクト達は、親子関係を辺としてコミットグラフ(オブジェクトグラフの部分グラフ)を作る
- ファイルシステムオブジェクト達はツリー(複数、これも部分グラフ)を作る。
- 1個のコミットオブジェクトに1個のツリーが付随する。
- オブジェクトデータベースの外から、人間可読な名前によりオブジェクトを参照可能。これがラベル。
- 固定ラベル=タグ、変動ラベル=ブランチ、HEADは特別なラベル。
- タグもブランチもHEADも、どこを指してもいい。参照先は自由。
- タグもブランチもいくら作ってもいい。不要ならいつでも消せる。
- HEADだけは特別だから消すな(普通の方法では消せない)。
- HEADはブランチを経由した間接参照が普通。だが、直接参照もあり。
- HEADが(間接、または直接に)指しているコミットがカレントコミット。
- 新しく追加したコミットは、カレントコミットの子となる。
- コミットの追加後、HEADは(間接、または直接に)新しいコミットを指す。
- ブランチラベルが指すコミットのAOS(ancestor-or-self)集合のことも「ブランチ」と呼ぶことがある。
- 差集合 AOS(X)\AOS(Y) を Y..X と書く。逆順になるから注意しろ。
- 対称差集合 AOS(X)△AOS(Y) を X...Y と書く。X...Y = Y...X 。
- たいていの有向非循環グラフがGitコミットグラフとして実現できるほどの自由度がある。(クイズやってミソ)