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 に入れる。