August 26, 2005

SVN レポジトリの公開

長らくやろうと思っていた自作のモジュールやスクリプトの SVN を公開してみました。→ svn.bulknews.net

svnserve でレポジトリの read-only アクセスを公開、viewcvs でディレクトリをブラウズできるようにしてます。ここまで紆余曲折あったので、備忘録代わりにちょっとまとめておきます。

CVS から Subversion へ

今年の2月ぐらいに、CVS から subversion に移行しました。subversion に付属している cvs2svn ツールを使ってほぼ一発で移行が完了したんですが、

* 公開したくないディレクトリがまじっている
* ディレクトリ構造がフラット
* 認証とか面倒だなあ

ということで公開はほったらかしていました。パッチを受け付けたり、こまいツールを公開するときは subversion レポジトリを公開しておいたほうが便利だということで、ちょっくら作業してみました。

ちなみに CVS から Subversion 化のメリットは一言では言い切れないぐらいたくさんありますが、こうした個人のホビープロジェクトなら、どうしても、という決め手になるものはないかもしれません。ただ、仕事のほうではブランチの管理・マージやディレクトリ・ファイルのリネームやアトミックな commit/revert など、subversion でないとお話にならない感じになってきているので、仕事とプライベートで同じツールを使うというのも無駄なノウハウを避けるという意味では重要かもしれません。

まずは SVN 構造を整理

移行時に、CVS でフラットに管理していたのを svn の trunk にそのままつっこんだので、

- trunk
-- foo
-- bar
-- baz

という感じのディレクトリ構成になっています。とくに問題はないのですが、各プロジェクトでブランチや tag を張ることを考えると、

- foo
-- trunk
-- branches
-- tags
- bar
-- trunk
-- branches
-- tags
...

というディレクトリ構造が一般的。ということで、ダンプをつくって以下のように作業。

* cd {checkoutdir}; ls > ~/modules
* ~/modules を編集して公開したくないものを削除
* svnadmin dump /path/to/repo > dump
* svndumpfilter `perl -nle 'print "trunk/$_"' ~/modules` < dump > new.dump
* perl -i -nlpe 's|Node-path: trunk/([^/]*)|Node-path: $1/trunk|' new.dump

だんだんバッドになってきましたが、これでディレクトリ構造を入れ替えて、公開したくないディレクトリを除去したダンプができたので、

* svnadmin create /path/to/newrepo
* svn co file:///path/to/newrepo
* cd newrepo
* for i in `cat ~/modules`; do svn mkdir $i; done
* svn ci -m "create new directories"
* svnadmin load /path/to/newrepo new.dump

な感じで新しい SVN レポジトリができました。

SVN レポジトリの公開

で、あとは公開ですが bulknews.net のサーバでは Apache2 が走ってないので、DAV + SVN で公開するのはちょっと面倒です。基本的には自分だけコミット権をもって、anonymous で read-only という形態を考えているので、

* svn+ssh で書き込み
* svnserve -i -r /path/to/svn を tcpserver で起動

という感じにしました。ブラウザでの閲覧は SVN::Web を使おうと思ったんですが、mod_perl 1.x ではイマイチ挙動が不審だったので viewcvs の 1.0-dev (subversion をサポート) を使うことに。

ローカルでは svk を使って colinux 内にミラーを切ってあります。これでいつでもチェックアウトしたりブランチを切って ad-hoc 開発ができますね。svl (PDF) も試してみたいなあ。

Posted by miyagawa at August 26, 2005 05:07 PM | Permalink | Comments (1) | TrackBack(0)
Comments

うちはapache 2.0入れました。
SSL+.htaccess+DAV+SVNでコミット権限の制限までやってます。
viewcvsで見れるってのは良いですね。

Posted by: PIA on August 27, 2005 03:01 AM
Trackbacks
TrackBack URL for this entry: http://blog.bulknews.net/mt3/mt-tb.cgi/1790
Post a comment