そこで私も、Cent OSに開発環境を移行しているついでに、SVNに乗り換えようと思います。
SVNはCVSを拡張したものという位置づけで、CVSではできなかったディレクトリのバージョン管理や、ファイル名の変更などに対応していることで、かなり使いやすくなっている印象です。
マニュアルも充実していて、オライリーから出版されている本がPDFで無料でダウンロードできました。日本語版もありました。すばらしい!
ここでは、Cent OS5をインストールしたばかりの状態で、リポジトリを作成し、既存のファイルをリポジトリに追加してみます。
1. SVN管理ユーザ・グループの作成
SVN管理用のユーザとグループをあらかじめ作成しておきます。
# groupadd svnuser
# useradd svnadmin -g svnuser
2. リポジトリの作成
あらかじめリポジトリとなるディレクトリを作成し、オーナーをsvnadminにしておきます。
# mkdir -p /svn/mh
# cd /svn/
# chown -R svnadmin:svnuser *
# su - svnadmin
svnadminユーザで、リポジトリを格納するディレクトリを用意し、svnadminコマンドでリポジトリを作成します。
$ svnadmin create /svn/mh
SVNでは、リポジトリの保存形式として、全てのデータをBarkeley DBに保存する方法と、OSのファイルシステムから見えるflat形式(FSFS)で保存する方法の2つのうちどちらかを選べるようになっています。デフォルトはFSFSです。Barkeley DB形式は高度なバックアップ方法などが使えるようですが、ちょっとしたことでリポジトリが壊れてしまいやすいということなので、私は新しい方法で使いやすそうなFSFS(デフォルト)を選びました。
3. 既存ソースファイルのインポート
svn importコマンドを使って、既存のソースファイルをリポジトリにインポートします。まずはインポートするソースファイルを用意します。インポートするディレクトリ構造に決まりはないようですが、経験から下のようにしておくのが方が良いそうです。私の例では~kura/svntmp/の下に次のようなディレクトリ構造を用意して、trunkの下にインポートしたいソースファイルを配置しました。
branches/
tags/
trunk/ ← この下にソースファイルを配置
次に、次のコマンドを実行します。
$ svn import ~kura/svntmp/ file:///svn/mh -m "Initial import"
4. 認証方法の設定
作成したリポジトリにはconfディレクトリが作成され、その中のsvnserve.confにこのリポジトリの認証方法が書かれています。
ここではユーザ毎の認証を行うこととし、kuraという名前のユーザが読み書きできるようにユーザを追加してみます。
まず、リポジトリの下のconf/svnserve.confを開き、下の2行のコメントアウト#を外します。realmは適当に変更しておきます。
[general]
password-db = passwd
realm = My First Repository
次に、同じディレクトリにあるpasswdファイルを開き、[users]の下に「ユーザ名 = パスワード」を追加します。ここで指定するユーザ名はLinuxのシステムに登録されているユーザ名でなくても何でもよいようです。
[users]
kura = passowrd
他のユーザがパスワードファイルや設定ファイルを見る事が出来ないようにしておきます。
$ chmod 600 passwd svnserve.conf
ちなみに、SVNではsvnserve.confによる認証以外に、SSH認証という方法があり、こちらも試しましたが、eclipseではSSHのパスワードを保存できないらしく(svnserve.confを使う方式のパスワードは保存できるのですが)、レポジトリを開く度にパスワードを聞いてきてとても使い物にならない状態だったのでやめました。。。
5. svnserveサービスの設定
SVNクライアントからSVNサーバに接続できるように、SVNサーバを設定します。SVNサーバにはSubversionに付属してくるsvnserveを使う方法と、httpd経由でApacheのモジュール(mod_dav_svn)を使う方法の2種類があるようですが、私の場合はWeb経由でリポジトリにアクセスすることもないので、設定が簡単なsvnserveを使うことにしました。
まず、rootユーザで/etc/servicesの次の2行を、
svn 3690/tcp # Subversion
svn 3690/udp # Subversion
次のように変更します。
svnserve 3690/tcp # Subversion
svnserve 3690/udp # Subversion
(これはデフォルトの/etc/servicesの間違いなのではないかという気がしないでもないです。。。下の設定ファイルの方でサーバ名をsvnに統一してしまう方法も可能ですが、svnはクライアントコマンドの名前なので気持ちが悪いので、こちらをsvnserveに修正しました。)
次に、/etc/xinetd.dに、次のような内容のファイルを作成し、svnserveという名前で保存します。
service svnserve
{
disable = no
socket_type = stream
protocol = tcp
wait = no
user = svnadmin
server = /usr/bin/svnserve
server_args = -i
log_on_failure += USERID
}
ここまで設定したら、xinetdを再起動します。
# service xinetd restart
さらに、ファイアウォールを設定している場合は、ポート3690へのアクセスを許可ておきます。
これで、SVNサーバの設定が完了しました。
6. SVNクライアントのインストール
eclipseにSVNクライアントのプラグインSubversiveがありましたので、私はこれをインストールしました。
(2009年7月26日追記:Tigrisの提供しているプラグインSubclipseの方が、グラフィカルなバージョンツリーを表示させたりできるなど、高機能なようです。)
7. クライアントでリポジトリの設定
SVNクライアントでリポジトリの設定をします。eclipseで、「SVNリポジトリエクスプローラ」パースペクティブを開き、「SVNリポジトリの追加」ボタンをクリックして、リポジトリの場所を入力します。svnserveをサーバとして使うので、場所はsvn://ではじまる文字列で指定しました。

ここまででサーバとクライアントの設定は終わりました。
8. eclipseプロジェクトへチェックアウト!
SVNレポジトリエクスプローラで、trunkの下のディレクトリを右クリックし、「チェックアウト」を選びます。
次に、「新規プロジェクトウィザードを使ってプロジェクトとしてチェックアウト」を選んで"Finish"ボタンをクリックします。
あとは、通常eclipseのプロジェクトを作成する要領でプロジェクトを作成してチェックアウト完了です。
チェックインするときには、4で設定した認証方法によってパスワードを聞いてきます。





