2nd
Rubyには公式のものだけでも30本のブランチに29,385個のチェンジセットがある(執筆時点)。ブランチの1,000倍程度のチェンジセットがあるということは、実際にはブランチとチェンジセットの関係は偏りがあるから、ともかく長いブランチは超長いということがいえる。ちなみに一番長いのはもちろんtrunkで、この枝の長さは20,992リビジョンだ。次点がruby_1_8で、3,328リビジョンある(執筆時点)。
さてこのくらいの規模になってくると、もはや全容を把握するというのは困難である。特にどのブランチがどのチェンジセットから派生したかという情報は、もちろん個別には取り出すことは可能だが、俯瞰するのが困難になってくる。実際、今回ちょっとしたことでgit rebaseしようとしたらrebase先を間違えてしまい、ものすごく太古の昔からrebaseされてしまいげんなりするという体験をした(俺が本当にやりたいのはrebase —ontoだった)。せめて枝分かれの概況が俯瞰できる何かがあればいいんだが、githubのnetwork graphとかどうもその用途には向いてない。
というわけでないものはしょうがないので作った。
FAQ
Q. これはどういうグラフですか
A. Githubのruby/rubyをforkしているすべてのプロジェクトを引っ張ってきてオブジェクト同士の連結グラフを生成して、そこから可縮辺を可能な限り縮約したものです。
Q. どう読めばいいのですか?
A. 概ね、上から下に向かって新しくなります。枝分かれしているところはCVSまたはSubversionまたはGitでブランチしたところです。合流しているところはgit mergeが発生しているところです。初期には枝分かれしかないが、あとの方に行くに連れてmerge commitが増えているのが観測できます。
Q. 字が書いてあるのとないのの違いは?
A. 書いてあるのはGitレベルのref名です。そのようなものがない場合は無名です。
Q. 俺のrefがない
A. たとえばgithubでforkしただけの人とかはそれだけでは枝分かれを生じないので、ここには現れません。意味のあるコミットをした人と、たまたまそこから他の人がブランチを切った場合のみ名前が出ています。
Q. 中央左付近のへんな丸が繋がってるのは何
A. mrknmethodmissingのしわざ
Q. ソースコード寄越せ
A. Githubに負荷がかかるのであまりおすすめできない。が、ともかく貼っておく。
