リポジトリの単位とリポジトリ内のディレクトリ構成などをまとめてみる。
リポジトリ分割のポイント
リポジトリの単位を考える。SVNは1つのリポジトリを複数に分けるのが簡単なのでまずはリポジトリ1つで問題ない。分割する場合は以下を考慮しなければならない。
サーバの再起動
svnserveの場合、svnserveの-rで「c:\svn_repository」のような、複数リポジトリを置いているフォルダを指定できるので、リポジトリを「svnadmin create c:\svn_repository\repo02」のように追加しても、svnserve自体を再起動しなくてもよい。設定変更もリアルタイムで反映された。
Apacheを使っている場合、Locationで仮想パスを設定するので、リポジトリが増えるたびにApacheの再起動が必要になってくる。
再起動を簡単にできそうであれば、Apacheを使ってリポジトリを分割してもいいとおもうが、できないならば、1つのリポジトリでがんばったほうがいい。
分割して再起動をおさえるためにはsvnserveを使うほうがよさげ。
Apacheを使っている場合、SVNParentPathでリポジトリを置いてあるルートフォルダを指定すれば再起動なしで運用できそう。詳細はSubversion1.5.2 apacheでのセキュリティ保護を参照のこと。
設定ファイルの数
svnserveの場合、複数リポジトリを使えば、複数の設定ファイルが生まれる。これだと設定が集約されない代わりに、各リポジトリごとに設定しやすくなる。
Apacheの場合は、複数リポジトリで1つの設定を行ったり、複数の設定を持ったりどちらでもできる。ただ、複数の設定を持つ場合は、リポジトリを追加するたびに、Locationの設定をしなければならないので、毎回Apache再起動が必要になると思う。
リポジトリ内のディレクトリ構成ポイント
プロジェクト単位で分けるのがよさげ。
/ /fujiharaproject /fujiharaproject/trunk /fujiharaproject/branches /fujiharaproject/tags /daiproject /daiproject/trunk /daiproject/branches /daiproject/tags
大きくなればこれをリポジトリ分割してもよい。
StrutsのSVN構成
apache.orgではどうやってるんだろう?ということでStrutsのSVN構成を調べてみた。Strutsはversion1.xとversion2.xがある。
ルート直下にはapache.orgのプロジェクトがずらりと並んでいる。その中のstruts以下はこんな感じ。
/ /activemq /ant /apr /sturts /sturts/archive /sturts/current /sturts/maven /sturts/sandbox /sturts/site /sturts/struts1 /sturts/struts1/branches /sturts/struts1/tags /sturts/struts1/trunk /sturts/struts2 /sturts/struts2/branches /sturts/struts2/tags /sturts/struts2/trunk
struts直下にはstruts1とstruts2以外にsiteとかmavenとかcurrentとかarchiveがある。多分なんだけど、struts1/trunkにはStrutsフレームワークに関するソースなどが中心おかれ、ドキュメントとかは入れてないのではないかな?
なぜ、そんなことを気にしたかというと、SVNだとバイナリもバージョン管理できるので、がつがつつっこんだりする。ただ、アプリ開発と同じレイヤにドキュメントなどを入れるのはなんか変だ。これを考慮し、Subversion実践入門を参考にまとめると、以下のような感じが理想なのかなと思った。
/archive /archive/oldproject01 /archive/oldproject02 /sandbox /sandbox/fujihara /sandbox/yamada /fujiharaproject /fujiharaproject /fujiharaproject/branches /fujiharaproject/tags /fujiharaproject/trunk/doc /fujiharaproject/trunk/tools /fujiharaproject/trunk/data /fujiharaproject/trunk/db /fujiharaproject/trunk/vendor /fujiharaproject/trunk/src /fujiharaproject/trunk/src/main/java /fujiharaproject/trunk/src/main/resources /fujiharaproject/trunk/src/main/config /fujiharaproject/trunk/src/main/webapp /fujiharaproject/trunk/src/main/webapp/WEB-INF /fujiharaproject/trunk/src/test/java /fujiharaproject/trunk/src/test/resources /fujiharaproject/trunk/src/test/filters /fujiharaproject/trunk/src/site
メンテされないプロジェクトはarchiveに突っ込んでおく。
sandboxは練習用にユーザごとで自由につくればいい。ただし、勝手に初期化したりするのはご了承くださいみたいにする。
docディレクトリにはプロジェクトに関係するドキュメントを置く。
toolsには便利ツールなどをつっこむ。
dataにはcsvファイルデータなどを置ける。
dbにはDBのDDLなどをつっこめばよし。
vendorにはjunitとかのライブラリを置いていく。Mavenを使えばこれはいらないかもね。
srcには最も大事なソースコードを置く。Mavenのディレクトリ構造にしてみた。
docとかはbranchの考え方を持たなくていいかもしれないので、藤原としては、
/fujiharaproject/doc /fujiharaproject/tools /fujiharaproject/data /fujiharaproject/db /fujiharaproject/vendor /fujiharaproject/branches /fujiharaproject/tags /fujiharaproject/trunk/src
でいいんじゃないかなーと思う。このへんは自由に決めてもらっていいと思うし。この場合、リポジトリを分割するならば、ルート直下で分けることができる。
この本はめずらしく参考になる本だった。賢者の知恵ってとても好き。
