Subversion リポジトリの構成(完成版)
最近、リポジトリを作るときは必ずこうしている。
product
├─dev
│ ├─branches
│ ├─tags
│ └─trunk (svn:externals で /pub と /res をインポートする)
│ ├─doc
│ ├─libs
│ └─src
│ ├─project1
│ └─project2
├─pub
│ ├─20091012
│ └─20100821
└─res
ポイントは3つ。
- バージョン管理をしないもの (pub, res) を trunk から外に追い出した。
- trunk にはソフトウェアのビルドに必要な全てを放り込み、tags にタグ付けする。
- pub, res への外部参照 (svn:externals) を trunk に設定するため、チェックアウトは trunk だけ。
発表資料なんかはソフトウェアバージョンと無関係に作られるから、tags に入れるとおかしくなるんだよね。基本的には資料は改訂されていくものだから、ソースコードと似たような性質なんだけど、過去の資料を急に引っ張り出してきたり、合理的にメンテナンスすることは難しい。だから、日付ベースのフォルダで管理した方がやりやすい。(もちろん、去年の資料を基に今年の資料を作るときとかは svn copy になるので、素のままのファイルシステムよりも便利。)
res は開発用の外部資料を格納しておくためのもの。APIマニュアルとか。基本的に何でもありだけど、ビルドに必要ならこっちでなくて trunk に入れる。