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