Subversion for Windows

インストールと設定

INSTALLING SUBVERSION A Quick Guide
Subversion によるバージョン管理 - httpd, Apache HTTP サーバ


http://subversion.tigris.org/ から svn-win32-1.1.3-2.zip を取得.取得した zip ファイルを D:\ に展開.D:\svn-win32-1.1.3\bin に PATH を通して Windows を再起動.
httpd.conf の

LoadModule dav_module         modules/mod_dav.so
LoadModule dav_fs_module      modules/mod_dav_fs.so

のコメントを外し,以下の記述を追加.

LoadModule dav_svn_module     "D:/svn-win32-1.1.3/httpd/mod_dav_svn.so"
LoadModule authz_svn_module   "D:/svn-win32-1.1.3/httpd/mod_authz_svn.so"

<Location /svn/repos>
    DAV svn
    SVNPath D:/Apache2/repos  (リポジトリへの絶対パスの例)
</Location>

その後,Apache を再起動.

リポジトリの初期化

リポジトリへの絶対パスが D:\Apache2\repos のとき,

D:\>svnadmin create D:\Apache2\repos

リポジトリを初期化.その後,ブラウザで http://localhost/svn/repos/ にアクセスして "Revision 0: /" というタイトルの Web ページが出力されればテスト完了.
リポジトリへ test ディレクトリをコミットするには,

D:\>svn import -m "コメント" test http://localhost/svn/repos/

とすればよい.

はまり所

Cygwin がインストールされている場合,Cygwin の /usr/bin にも svn や svnadmin などが含まれている.環境変数 PATH で Cygwin の bin ディレクトリが D:\svn-win32-1.1.3\bin よりも優先されるようになっていれば,httpd.conf に指定した D:/svn-win32-1.1.3/httpd/mod_dav_svn.so と不整合が起こるのか,色々な不具合がある.(私の環境では Cygwinsvn のバージョンは 1.0.6 (r10360) だった.Cygwin 版と Windows 版の不整合か,バージョンの不整合かは未確認.)echo %PATH% や which svn などして Cygwin 版と Windows 版のどちらが優先されているか確認しておくとよい.

Cygwin 版 svnadmin でリポジトリを初期化したとき,ブラウザで http://localhost/svn/repos/ にアクセスしても "HTTP 500 内部サーバー エラー" というタイトルの Web ページが出力される.

Cygwinsvnsvn import したときのエラー表示は

$ svn import -m "hoge" test http://localhost/svn/repos/
svn: PROPFIND request failed on '/svn/repos'
svn:
Could not open the requested SVN filesystem

これらを実行するたびに,Apache2 の error.log には

[Fri Feb 04 04:22:46 2005] [error] [client 127.0.0.1] (20014)Error string not specified yet: Berkeley DB error while opening environment for filesystem D:/Apache2/repos/db:\nInvalid argument
[Fri Feb 04 04:22:46 2005] [error] [client 127.0.0.1] Could not fetch resource information.  [500, #0]
[Fri Feb 04 04:22:46 2005] [error] [client 127.0.0.1] Could not open the requested SVN filesystem  [500, #160029]
[Fri Feb 04 04:22:46 2005] [error] [client 127.0.0.1] Could not open the requested SVN filesystem  [500, #160029]

このようなエラーが記録される.

リポジトリの認証

上で設定した Location ブロックに以下の記述と

    AuthType Basic
    AuthName "Subversion repository"
    AuthUserFile /my/svn/user/passwd/file  (パスワードファイルへの絶対パス)

以下の a 〜 c のいずれかの記述を加える.

a) 読み書きのアクセス制限

    Require valid-user

b) 書き込みのアクセス制限

    <LimitExcept GET PROPFIND OPTIONS REPORT>
        Require valid-user
    </LimitExcept>

c) 読み込みと書き込みで別々のアクセス制限

    AuthGroupFile /my/svn/group/file  (グループファイルへの絶対パス)

    <LimitExcept GET PROPFIND OPTIONS REPORT>
        Require group svn_committers
    </LimitExcept>

    <Limit GET PROPFIND OPTIONS REPORT>
        Require group svn_committers
        Require group svn_readers
    </Limit>

圧縮

Apache で mod_deflate が設定されていれば,Location ブロックに

SetOutputFilter DEFLATE

と書けば deflate による圧縮が有効になる.