折角の機会ですので、RedmineのSubversionのリビジョン管理について
書きたいと思います。
「Subversion上にブランチを作らないのですか?」
との問いですが、最近は、1.2-stable、1.1-stableのようなstableと、
trunkしか使っていません。
現在のリビジョン管理では、trunkで更新していったものに対して、
次のメジャーリリースの数週間前にブランチが作成されます。
これは他のオープンソースプロジェクトにおいては、コードフリーズと呼んでいるものに
該当するかと思います。
trunkもCI Serverの対象になっており、正常動作することを保証しています。
http://www.redmine.org/builds/index.html
ですので、trunkと言えども、実験的なコードは入れられません。
また、現在の運用では、まず、trunkに入れて、CI Serverのテストが通過してから、
stableに入れるというルールになっています。
これをSubversionでは「マージ」と呼んでいます。
stableに対してのみコミットした場合、次期メジャーリリースでの漏れが発生する
可能性がありますが、trunk, stable両方に入れるということで、これを防いでいます。
実は、まだSubverion上に目に見えるブランチがあります。
http://www.redmine.org/projects/redmine/repository/show/sandbox
さらに、「消された」ブランチも存在します。
これは、Mercurialのhgsubversionという拡張を用いた
Subversionの全リビジョンをミラーしたリポジトリです。
https://bitbucket.org/redmine/redmine-all
Mercurialには「名前付きブランチ」というGitには無い機能があり、
Subversionのブランチを忠実に再現しています。
Subversionのブランチの削除を、Mercurialの名前付きブランチのcloseとして再現しています。
$ hg branches
1.1-stable 6117:f850c35918e0
1.2-stable 6116:8bf6caa81dc2
default 6115:7647af387ede
1.0-stable 4955:d10103f89c1a
0.9-stable 3853:72aedf7ef5fb
0.8-stable 3304:3c08d4d012e0
../sandbox/rails-2.3 2618:d79f3571761c
../sandbox/rails-2.2 2479:12f541caa4ed
0.7-stable 2194:fe4e88bbd556
0.6-stable 1242:04c936a7eed4
$ hg branches --closed
1.1-stable 6117:f850c35918e0
1.2-stable 6116:8bf6caa81dc2
default 6115:7647af387ede
1.0-stable 4955:d10103f89c1a
0.9-stable 3853:72aedf7ef5fb
0.8-stable 3304:3c08d4d012e0
../sandbox/rails-2.3 2618:d79f3571761c
../sandbox/rails-2.2 2479:12f541caa4ed
0.7-stable 2194:fe4e88bbd556
0.6-stable 1242:04c936a7eed4
../sandbox/groups 4579:ef51197f3884 (閉鎖済み)
../sandbox/multiple_roles 4578:e6c00dbebc76 (閉鎖済み)
../sandbox/tickets_permissions 4577:96776806a8e9 (閉鎖済み)
work/project_inheritance 4576:fcb31a070fd4 (閉鎖済み)
work/nested_projects 4575:fd2885acea28 (閉鎖済み)
work/groups 4574:41f0e0be7c1a (閉鎖済み)
work/hooks 4573:3970bd53157f (閉鎖済み)
nbc 4572:f014f24ca207 (閉鎖済み)
swistak 4571:483b49785beb (閉鎖済み)
work/rails-2.2 2344:d5264652c372 (閉鎖済み)
work/rails-2.1 2343:1216905eeace (閉鎖済み)
work/rails-2.0 2342:ec09c63fc1d4 (閉鎖済み)
work/mailing_lists 2232:ada4005ff789 (閉鎖済み)
work/gloc-1.2.0 2231:e8fd9fd7672a (閉鎖済み)
work/issue_relations 2230:c7ae0d1453cf (閉鎖済み)
work/rest_sys 2229:1fce73b04e34 (閉鎖済み)
work/time 2228:00522a08f1b4 (閉鎖済み)
work/queries/trunk 2227:f534208c55f5 (閉鎖済み)
work/wiki 2226:424df5aa5fd5 (閉鎖済み)
work/scm 2225:fc2cb3e326d7 (閉鎖済み)
work/git 2224:c61c98da1c10 (閉鎖済み)
0.6 1041:10cc582cc65c (閉鎖済み)
ですので、状況によっては、Subversion上に、Rails3.1対応用のブランチが
作成される可能性もあります。
CVS/Subversionを触られた経験があり、Git/Mercurial/Bazaarなどの分散型を
扱われている方なら理解されているかと思いますが、
Subversionのブランチ、及び、それに対する「マージ」は面倒です。
私は、RedmineのSubversionに対して、このhgsubersionを使ってコミットしています。
また、Subversionの「マージ」は、
MQ (Mercurial Queues) と transplant (gitのcherry-pickに該当)拡張を使っています。
Git/Mercurialを使って、Rails3.1対応を全世界の人の協力を得るのは
ありだと考えています。
Jeremy Kemper、Gonçalo Silva氏が、
Redmine の Thu Jul 1 18:49:25 2010 +0000 のリビジョン3826まで
Git/Mercurial用語での「マージ」済みのものを
私がつい最近の6123に対してGit/Mercurial用語での「マージ」を行いました。
それが、Redmine本家へのこのポストです。
http://www.redmine.org/issues/4796#note-16
Git/Mercurialのリビジョンのハッシュ値も書いてあり、どれがそのリビジョンなのか
分かるようにしています。
さらに、今回、githubのリビジョンを利用させていただいた「お礼」として、
githubでpull requestをJeremy Kemper、Gonçalo Silva両氏に送信し、
Gonçalo Silvaに受け取ってもらいました。
https://github.com/goncalossilva/redmine/pull/1
こうやって全世界の人が協力しあうのがオープンソース・分散型VCSの醍醐味だと思っています。
長くなりましたので、以上です。