Subversnion

Subversionとはフリーなオープンソースのバージョン管理ソフト。
特徴として、ソースコードなどのファイルはリポジトリに置かれ、そこで一元管理される。
また、ソースコードの変更履歴がわかったり、分岐やマージといったことができる。
CVSを使ったことがないんだが、公式サイトの説明を見る限り、過去の資産がなければ敢えてCVSを使う必要がないと思う。
また、cvs2svnを使えばリポジトリSubversionにコンバートしてくれるようだ。


以下、使うまでの手順を記載。
サーバサイド

  • Subversionをインストールする。
  • ネットワーク経由で使うためのサーバサービスを立ち上げる。
  • ユーザ登録。
  • リポジトリの作成

クライアントサイド

  • クライアントソフトをインストールする。
  • リポジトリのチェックアウト



SubversionのインストールはWindowsならインストーラで一発なのだが、Linuxだとすこし手間がある。
CentOSDebian系だと、パッケージ管理ソフトからインストールできるが、そういう仕組みのないディストリビューションだとソースコードからビルドインストールしないといけない。
やってみたが、ややこしかった。
必要なライブラリをあらかじめ用意したり、コンパイルしてみてもエラー続出だったりと、あまりお勧めできない方法。
(サクラインターネットでSubversionを使いたければ、ソースからビルドは必須。)
あと、rpmでインストールするときも必要なrpmを揃えることやrpmのバージョンが違う(特にaprApache Portable Runtimeが)ことの解消が意外としんどい。
ここは楽にインストールでき豊富な情報があるCentOSDebian系がお勧め。


yumやaptでインストールが完了すると、次にネットワーク経由で使うための設定を行う。
Subversionはネットワーク経由で使う仕様になっていて、その方法としてSubversionに付属してるsvnserverを使うか、Apacheと連携して使うか二通りある。
SSL通信とかポートとかの兼ね合いがあって、Apacheを使うのが一般的で、手軽に動かしたい場合はsvnserverを使う人がいるようだ。
SubversionApacheと連携させる場合は、mod_dav*1、mod_dav_svnが必要で、なければ別途用意する必要がある。
Apacheの設定ファイルに

<Location /repos >
DAV svn
SVNParentPath /usr/local/svn
AuthType Basic
AuthName "Authorization Realm"
AuthUserFile /path/to/access/file
Require valid-user

を追加する。
イタリックな文字が環境ごとの変数で、<Location /repos>はhttp://localhost/reposというようにURLと対応している。
SVNParentPath /usr/local/svnはサーバ内のリポジトリの場所をあらわしている。
AuthUserFile /path/to/access/fileはこのロケーションにアクセスする場合にBasic認証を求めているので、そのパスワードファイルの場所を表している*2
パスワードファイルはhtpasswdコマンドで作成、ユーザの追加等ができる。
また、リポジトリ内の詳細なアクセス管理を行いたい場合は、 AuthzSVNAccessFile /path/to/access/fileをLocationタグ内に追加し、指定しているファイルに記述すればいい。
これで、Aapcheの方の設定は完了。


次にリポジトリの作成に移る。
先ほどの設定ファイルに書いたリポジトリのパス(例:/usr/local/svn)のディレクトリを作成する。

cd /usr/local/svn
svnadmin create hoge
chown -R apache:apache hoge

とすると、hogeという名前のリポジトリが作成される。

あとは、http://localhost/repos/hogeでチェックアウトできればサーバサイドは終了。
クライアントサイドは、Subversionをいれればクライアントとしても使える。
他に便利なTortoiseSVNEclipseプラグインなどもあり、開発環境に合わせて入れればいいと思う。

*1:Apacheと連携して使う場合、WebDAVプロトコルを用いている。そのフロントエンド部分がmod_dav、バックエンド部分をmod_dav_svnが処理している。この辺りの詳しいことはhttp://www.atmarkit.co.jp/flinux/special/webdav/webdav03c.htmlhttp://www.atmarkit.co.jp/flinux/special/webdav03/webdav01a.html

*2:正確にはリポジトリの親フォルダ