このブログの更新は Twitterアカウント @m_hiyama で通知されます。
Follow @m_hiyama

メールでのご連絡は hiyama{at}chimaira{dot}org まで。

はじめてのメールはスパムと判定されることがあります。最初は、信頼されているドメインから差し障りのない文面を送っていただけると、スパムと判定されにくいと思います。

参照用 記事

Gitの解剖学的要点:「怖くない」の1/15圧縮版

もうGitは怖くない: 自信を持って使いたいあなたへ」は、「タイトルがミスリーディングで良くない」とか、「よけい怖くなる」とかの反応がありました。「怖い」という感情は個人差があるからしょうがないですね。タイトルはおそらく、「Gitの解剖学」あたりが受け入れられ易かったのかな。それとも、「ほんとうは怖いGit」?

僕自身が気になったことは2点で:

  1. 長過ぎる。読むのが大変。
  2. 男女の裸の写真が入っている。

裸の写真2枚は、いちおうストーリーを補完しているのでイイとしましょう。しかしあの長さは、たぶん自分でも読み返さないと思います。でも、書いてある内容を後で参照はしたいので、要点だけを箇条書きにまとめておきます。

  1. Gitは内部構造がまる見え。.git/ディレクトリを覗けばいい。
  2. Get http://www.chimaira.org/misc/git-quest-kit.shar . See https://github.com/m-hiyama/git-quest-kit .
  3. Gitオブジェクトとは、ID付きのバイト列データ。
  4. オブジェクトIDは40桁文字列。
  5. 「オブジェクトのID ←→ オブジェクトの中身」と1:1に対応。IDの衝突は心配すんな。
  6. .git/objects/ の下にオブジェクト達が入っている。
  7. オブジェクトは消せない、変更できない。保存後は永久凍結で、オブジェクトは増える一方。
  8. 消えるのではなくて、探しにくくなるだけ。ほんとに消すのは大変。
  9. オブジェクトデータベースはグラフ構造を持つ。オブジェクトIDによる参照が有向辺となる。
  10. コミットオブジェクト達は、親子関係を辺としてコミットグラフ(オブジェクトグラフの部分グラフ)を作る
  11. ファイルシステムオブジェクト達はツリー(複数、これも部分グラフ)を作る。
  12. 1個のコミットオブジェクトに1個のツリーが付随する。
  13. オブジェクトデータベースの外から、人間可読な名前によりオブジェクトを参照可能。これがラベル。
  14. 固定ラベル=タグ、変動ラベル=ブランチ、HEADは特別なラベル。
  15. タグもブランチもHEADも、どこを指してもいい。参照先は自由。
  16. タグもブランチもいくら作ってもいい。不要ならいつでも消せる。
  17. HEADだけは特別だから消すな(普通の方法では消せない)。
  18. HEADはブランチを経由した間接参照が普通。だが、直接参照もあり。
  19. HEADが(間接、または直接に)指しているコミットがカレントコミット。
  20. 新しく追加したコミットは、カレントコミットの子となる。
  21. コミットの追加後、HEADは(間接、または直接に)新しいコミットを指す。
  22. ブランチラベルが指すコミットのAOS(ancestor-or-self)集合のことも「ブランチ」と呼ぶことがある。
  23. 差集合 AOS(X)\AOS(Y) を Y..X と書く。逆順になるから注意しろ。
  24. 対称差集合 AOS(X)△AOS(Y) を X...Y と書く。X...Y = Y...X 。
  25. たいていの有向非循環グラフがGitコミットグラフとして実現できるほどの自由度がある。(クイズやってミソ)