31st
まあ、おまえらもmatz基調講演を聞いて「意外にも思いつきではなくちゃんとパッチが管理されている」ことに衝撃を受けたことだろう(実は前から日記とかで言及されてはいたが)。あれを見てそろそろgit使い始めようかとか思いだしたかもしれない。しかし、じゃあといってRubyのレポジトリをgit svn cloneしようとすると果てしなく時間がかかる(ネットワーク状況などにもよるが30時間くらい?一日以上なのは確実)ので、多くの人はここでめげてしまう。
ところが案外知られていないけどgit-svn(1)は実はよくできていて、git svn cloneってのは毎回みんながやる必要はなくて、本当はだれかがどこかで一回やればいいのである。他の人はそいつをgit cloneすればいいの。その誰かさんのgitレポジトリってのはみんなが見れるところにないといけないわけだが、そこはもちろんgithub使えよ。って話。まあそういうわけで、おまえらのために俺のgithubアカウントにコミッタ用レポジトリのフルミラーを置いてみたので、おまえらも使えばいいと思う。
(1) Rubyコミット権持ってないおまえらにおける手順
コミット権持ってないおまえらがこのミラーを使うとなにが嬉しいかは単純明快、「pull requestできる」この一点である。Rubyのレポジトリ自体はrubyspec / matzrubyとかにも置いてあるんだけど、これらはread onlyなのでpullしてもらえない。このミラーは俺経由でRubyのsvnレポジトリに突っ込まれる道が一応ある(内容によるが)。おそらく同種のミラーは今のところこれしかない。使い方は何も特別なことはなく、
% git clone git://github.com/shyouhei/ruby.git
まあようするに普通のgitレポジトリと同じ使い方をすればよい。
(2) Rubyコミッターのおまえらにおける手順
コミッターはずばりパッチ袋として使う。まず下準備として
% git clone git://github.com/shyouhei/ruby.git % cd ruby % git svn init -s --prefix=origin/ svn+ssh://svn@ci.ruby-lang.org/ruby % git svn fetch
とする。これが上に書いた「よくできてる」部分で、このようにgit cloneに上からgit svn initをかぶせると、全体としてはgit-svnが有効だがcloneしてきたものも無視されずに、その続きからgit-svn的「普通の使い方」ができる。これは賢い。
で、ここにまつもとさんみたいにstgitでパッチ袋作ってもいいし、そんなことせずに素のgitを使っても良いだろうが、そのへんの話はさすがに他の文章に譲る。あとは、コミッターの人は俺を経由せずとも
% git svn dcommit
でいきなり本家に突っ込めるはずなので、俺ミラーはたぶん最初しか使わないと思われる。
(3) さらにそれをforkする場合
俺のレポジトリは俺にはforkできないからよくわからないんだけど、コミッターの人がさらにgithubで(2)をforkする時は
- まず(2)の手順でローカルにレポジトリを作る
- githubのサイト上でforkボタンを押してfork
- % git remote add hoge git@github.com:${おまえのアカウント}/ruby.git
- % git push hoge master
でいいんじゃないかな。要人柱。