WEBサービス創造記

WEBサービスを作ったり保守したりしてる人のメモブログです。

CentOSにSubversionサーバを構築する

   

前提条件

  • root権限があるサーバを所持している
  • Apacheがインストールされている

subversionのインストール

バージョン管理システムであるsubversionをサーバにインストールします。
下記コマンドでインストールを行えます。

# yum install subversion

下記のようにバージョンが出力されればOKです。

# svn --version --quiet
1.6.11

蛇足ですが、subversionとsvnの違いは、subversionがSCM(バージョン管理システム)であるのに対し、svnはそのCUIクライアントツールです。

リポジトリの作成

リポジトリは、Subversionが管理するデータの格納場所のことです。

いろいろ見てると、/var/svn/repos/や/home/svn/reposに作ってる人が多いみたい。今回は/var/svn/reposにつくりました。

# mkdir -p /var/svn/repos
# svnadmin create /var/svn/repos/sample

Subversionではtrunkという開発の主系のディレクトリと、必要に応じてツリー全体から分岐するbranchesやtagsといった3つのディレクトリからリポジトリを構成する規約がよく利用されるので、それも作ります。

# svn mkdir file:///var/svn/repos/sample/trunk file:///var/svn/repos/sample/tags file:///var/svn/repos/sample/branches -m 'Create trunk, tags, and branches.'

また、”http://ホスト名/svn/xxx”でリポジトリにアクセスできるようにApacheに所有権を持たせます。

# chown -R apache:apache /var/svn

Apacheの設定

mod_dav_svnのインストールと設定

ApacheのSubversion連携モジュールであるmod_dav_svn をインストールします。

# yum install mod_dav_svn

mod_dav_svnをインストールしたら、/etc/httpd/conf.d/subversion.confというSubversion用の設定ファイルが配置されるので、これを編集します。

# vim /etc/httpd/conf.d/subversion.conf
<Location /svn/sample>
    DAV svn
    SVNPath /var/svn/repos/sample
</Location>

編集後、Apacheを再起動します。

# /etc/rc.d/init.d/httpd restart

ブラウザから”http://ホスト名/svn/sample/”にアクセスすると、リポジトリが表示されます。

アクセス制限の設定

このままだと誰でもアクセスできてしまうので、アクセス制限をかけます。
仕組みはBASIC認証と同じです。

先ほどの設定ファイルに、以下のように認証に関する設定を追記します。

# vim /etc/httpd/conf.d/subversion.conf
<Location /svn/sample>
    DAV svn
    SVNPath /var/svn/repos/sample

    AuthType Basic 
    AuthName "Authorization Realm" 
    AuthUserFile /var/svn/repos/sample/.htpasswd
    Require valid-user 
</Location>

認証アカウントは下記コマンドで生成。
ファイルが既に存在する場合は-cオプションを外してください。

# htpasswd -b -c /var/svn/repos/sample/.htpasswd sample password_for_sample_user

svnコマンドによるコミットやチェックアウト

Subversionサーバが構築できたところで、リポジトリをローカルにチェックアウトしたり、ローカルで行ったコミットをリポジトリに反映したりしてみましょう。

ローカルへのチェックアウト

下記コマンドで、チェックアウトができる。

$ cd /path/to/work_dir
$ svn checkout http://ホスト名/svn/sample/ sample
Authentication realm:  Authorization Realm
Password for 'sample': 
A    sample/trunk
A    sample/branches
A    sample/tags
Checked out revision 1.

ローカルにリポジトリのファイルを持ってくることができました。

$ tree sample/
sample/
├── branches
├── tags
└── trunk

ローカルでのコミット

続いて、ローカルでコミットを行って、リモートのリポジトリに反映してみましょう。

$ cd sample/
$ echo 'foo' > trunk/bar.txt
$ svn add trunk/bar.txt
$ export SVN_EDITOR=vim  コミットで利用するエディタを指定。-mオプションでワンライナーで書く事もできる
$ svn commit
Add bar.txt  コミットの内容を書いて保存
--This line, and those below, will be ignored-- 
 
A    trunk/bar.txt 

上記のようにコミットを行うと、リビジョンがあがり、さらにリポジトリにも反映されます。
ブラウザから”http://ホスト名/svn/sample/”にアクセスして、追加したbar.txtがあるかどうか確認してみましょう。

このようにリモートのSubversionリポジトリを利用すれば、チーム間での開発やファイルの受け渡しが容易になります。

 - Subversion , , , , ,