Subversion

2009/6/18更新

対応バージョン: 1.6.2

Webブラウザからリポジトリにアクセスするとサーバから以下のようなメッセージが返ってきてリポジトリにアクセスできない。

<?xml version="1.0" encoding="utf-8"?>
<D:error xmlns:D="DAV:" xmlns:m="http://apache.org/dav/xmlns" xmlns:C="svn:">
<C:error/>
<m:human-readable errcode="200030">
Could not open the requested SVN filesystem
</m:human-readable>
</D:error>

Apacheのログには以下のメッセージが出ている。

(20014)Internal error: SQLite compiled for 3.6.15, but running with 3.3.7
Could not fetch resource information.  [500, #0]
Could not open the requested SVN filesystem  [500, #200030]
Could not open the requested SVN filesystem  [500, #200030]

これはSubversionのApacheモジュール(/usr/local/apache2/modules/mod_dav_svn.soなど)がリンクしているSQLiteライブラリのバージョンが3.6.15であるにもかかわらず、古いバージョンの3.3.7が別のモジュールによって使用されていることを示す。

例えばSubversion導入より前にPHPモジュール(libphp5.so)などを入れていたりすると、同モジュールは導入時にSQLiteライブラリをリンクするため古いバージョンのライブラリをリンクしている可能性がある。

したがってPHPモジュールを導入し直して新しいSQLiteライブラリをリンクするようにすればよい。

あるいはPHPモジュールを使用していなければ設定ファイルで無効にする。

% sudo vi /usr/local/apache2/conf/httpd.conf
:
# LoadModule php5_module        modules/libphp5.so <--- コメントアウト
:

2010/5/15更新

対応バージョン: 1.6.11

SubversionのリポジトリにApacheのWebDAV経由でアクセスするには/usr/local/apache2/conf/httpd.confに以下の設定を追加する。

ここでは/var/svnに格納されているリポジトリを/svnとして公開する。ユーザ認証にはベーシック認証を使用する。

LoadModule dav_svn_module     modules/mod_dav_svn.so
LoadModule authz_svn_module   modules/mod_authz_svn.so

<Location "/svn"> <--- URL
  DAV svn
  SVNPath /var/svn <--- 公開するリポジトリのパス
  # Basic認証
  AuthType Basic
  AuthName "Subversion Repository"
  AuthUserFile /usr/local/apache2/.htpasswd_dav_svn
  Require valid-user
</Location>

関連資料・記事

設定を追加したらApacheを再起動する。

% sudo service apache restart

Webブラウザ等でhttp://localhost/svnにアクセスできればよい。

また、WindowsのExplorerから操作する場合はTortoiseSVN等を使用する。

2010/5/15更新

対応バージョン: 1.6.11

公式サイト

準備

あらかじめインストールしておくもの

Apache 2

mod_dav_svnを使用したい場合

SQLite 3.4.0以降
Berkeley DB 4.0.14以降

リポジトリ管理にBerkeley DBを使用したい場合

関連資料・記事

導入OS

Ubuntu 9.10

インストール

配布ファイル展開

% tar jxvf subversion-1.6.11.tar.bz2
% cd subversion-1.6.11

make,インストール

% ./configure <オプション>
% make
% sudo make install

インストール物 (man,infoは除く)

/usr/local/bin/svn
/usr/local/bin/svnadmin
/usr/local/bin/svndumpfilter
/usr/local/bin/svnlook
/usr/local/bin/svnserve
/usr/local/bin/svnsync
/usr/local/bin/svnversion

/usr/local/lib/libsvn_*

/usr/local/include/subversion-1/*

/usr/local/etc/pear.conf

/usr/local/apache2/modules/mod_dav_svn.so
/usr/local/apache2/modules/mod_authz_svn.so

上記の他、Apacheの設定ファイル/usr/local/apache2/conf/httpd.confに以下の行が追加される。

LoadModule dav_svn_module     modules/mod_dav_svn.so
LoadModule authz_svn_module   modules/mod_authz_svn.so

共有ライブラリキャッシュ更新

% sudo ldconfig
% ldconfig -p | grep svn
    libsvn_wc-1.so.0 (libc6) => /usr/local/lib/libsvn_wc-1.so.0
    libsvn_wc-1.so (libc6) => /usr/local/lib/libsvn_wc-1.so
    libsvn_subr-1.so.0 (libc6) => /usr/local/lib/libsvn_subr-1.so.0
    libsvn_subr-1.so (libc6) => /usr/local/lib/libsvn_subr-1.so
:

リポジトリ操作

ここでは/var/svn配下にリポジトリを作成してみる。

まず、リポジトリを初期化する。

% mkdir /var/svn

% svnadmin create /var/svn

リポジトリに登録するファイルを作成する。

ここでは1つのディレクトリと1つのファイルを作成する。

- test
   |
   +- readme.txt
% mkdir test
% echo "read me first." > test/readme.txt

上記ファイルをリポジトリに登録する。

% svn import test file:///var/svn/test -m "first import"
Adding         test/readme.txt

Committed revision 1.

実ファイルをいったん削除し、登録したモジュールをチェックアウトしてみる。

% rm -rf test

% svn checkout file:///var/svn/test work
A    work/readme.txt
Checked out revision 1.

チェックアウトしたファイルに1行追加し、作業前との差分を表示させてみる。

% echo "now editting..." >> work/readme.txt

% svn diff work
Index: work/readme.txt
===================================================================
--- work/readme.txt	(revision 1)
+++ work/readme.txt	(working copy)
@@ -1 +1,2 @@
 read me first.
+now editting...

修正後の状態をコミットしてリポジトリに反映させる。

% svn commit work -m "add line"
Sending        work/readme.txt
Transmitting file data .
Committed revision 2.

コミットし忘れているファイルがあるかどうかは以下のコマンドで確認できる。コマンドを実行して何も表示されなければよい。

% svn status work

今度は新しくファイルを追加してみる。

% echo "second file" > work/second.txt

% svn add work/second.txt
A         work/second.txt

% svn status work
A       work/second.txt

この状態ではまだリポジトリに反映されていないので、コミット操作を行う。

% svn commit work -m "add second file"
Adding         work/second.txt
Transmitting file data .
Committed revision 3.

ファイル名を変更するには以下のようにする。

% svn status work

% svn move work/second.txt work/tmp.txt
A         work/tmp.txt
D         work/second.txt

% svn status work
D       work/second.txt
A  +    work/tmp.txt

% svn commit work -m "chenge file name second.txt to tmp.txt"
Deleting       work/second.txt
Adding         work/tmp.txt

Committed revision 4.

ファイルを削除するには以下のようにする。

% svn delete work/tmp.txt
D         work/tmp.txt

% svn status work
D       work/tmp.txt

% svn commit work -m "delete tmp.txt"
Deleting       work/tmp.txt

Committed revision 5.

リポジトリの登録状況を調べるにはsvnlookコマンドを実行する。

% svnlook info /var/svn
foo
2009-06-15 19:41:56 +0900 (月, 15  6月 2009)
14
delete tmp.txt

% svnlook history /var/svn
REVISION   PATH
--------   ----
       5   /
       4   /
       3   /
       2   /
       1   /
       0   /

% svnlook tree /var/svn
/
 test/
  readme.txt