Subversionのリポジトリ構成

なんか今更感のあるネタですが書いてみたいと思います。大きく分けて3パターンあると思います。

1. 単一リポジトリ単一trunk型

http://.../svn/ProjectA/
    |
    |--------trunk/
                 |--------ComponentA/
                 |--------ComponentB/
    |--------branches/
                 |--------Patch_1.0
                            |--------ComponentA/
                            |--------ComponentB/
    |--------tags/
                 |--------1.0
                            |--------ComponentA/
                            |--------ComponentB/

いちばんオーソドックスなパターンといえるでしょう。個人的には好みです。
ComponentAとComponentBのバージョンを同期させる必要があるならこの構成でしょう。
Redmin使ってるならhttp://.../svn/ProjectA/trunk/ComponentAをプロジェクトに割り当てるんでしょう。たぶん。

2. 単一リポジトリ複数trunk型

http://.../svn/ProjectA/
    |
    |--------ComponentA/
                            |--------trunk/
                            |--------branches/
                            |--------tags/
    |--------ComponentB/
                            |--------trunk/
                            |--------branches/
                            |--------tags/

これも割と見るタイプです。ComponentAとComponentBのバージョンを同期させる必要が無いならこの構成になるのかなと。
Apahce(https://svn.apache.org/repos/asf/)もこのタイプという気がします。Apahceの場合は、第一階層がプロジェクト、第二階層がサブシステム、第三階層がtrunk, tags, branchesとなってますね。

3. 複数リポジトリ

http://.../svn/ComponentA/
    |
    |--------trunk/
    |--------branches/
    |--------tags/

http://.../svn/ComponentB/
    |
    |--------trunk/
    |--------branches/
    |--------tags/

Seasar(https://www.seasar.org/svn/)がこのタイプですね。

ComponentAとComponentBのバージョンを同期させる必要が無いならこの構成でもいい気がします。リビジョン番号が混ざらないし。Trac 0.12のマルチリポジトリ使うならこの構成になるのかなと。

で、RedmineTracとの連携も含めて考えても、どの構成にするかはComponentAとComponentBの依存関係次第かなと。

例えばComponentAが無いとComponentBがコンパイルできないようなケースなら一般的には上記1のタイプかなと思います。ただTrac 0.12のマルチリポジトリ使うなら3になるでしょう。個人的には1のほうが自然な気がしますがどうなんだろ。
普通に考えると1の構成にしてRedmineのプロジェクトを複数にすればいい気もしますが、Redmineユーザでもマルチリポジトリは欲しいと思っているようです。プロジェクトを分けると関連が薄くなりすぎるからのようです。難しいですね。

それ以外にはComponentAがコアでComponentBがプラグインのようなケースなら2のタイプという気がします。プラグインごとにバージョンを同期させなくてもいいよねっていう発想です。