svnsyncでリポジトリのミラーを作成する方法。

まずシンク(ミラー先)リポジトリを作成。 作成したら、必要に応じてconf/authz, conf/passwdなどを変えておく。

svnadmin create sync

続いて、リポジトリ内のhooksディレクトリにあるpre-revprop-change.tmplとstart-commit.tmplをコピー、編集してsvnsyncするユーザのみアクセスできるようにする。

cd sync/hooks
cp pre-revprop-change.tmpl pre-revprop-change
chmod u+x pre-revprop-change
cp start-commit.tmpl start-commit
chmod u+x start-commit

それぞれのファイルの内容は次のとおり。 svnはsvnsyncを実行するユーザ。

pre-revprop-change.sh
#!/bin/sh
USER="$3"

if [ "$USER" = "svn" ]; then
  exit 0
else
  exit 1
fi
start-commit.sh
#!/bin/sh
USER="$2"

if [ "$USER" = "svn" ]; then
  exit 0
else
  exit 1
fi

svnsync initでシンクリポジトリを初期化。

svnsync init file:///srv/sync/ file:///srv/repos/project/
リビジョン 0 の属性をコピーしました。

svnsyncを実行したとき、

svnsync: リポジトリが、リビジョン属性を変更できるようにはなっていません。
管理者に pre-revprop-change フックを作成するよう頼んでください

と表示される場合は、フックの設定に誤りがある。

初期化がうまくいったら、svnsync syncでリポジトリを同期する。

svnsync sync file:///srv/sync/
リビジョン 1 をコミットしました。
リビジョン 1 の属性をコピーしました。
リビジョン 2 をコミットしました。
リビジョン 2 の属性をコピーしました。
ファイルのデータを送信しています .....
リビジョン 3 をコミットしました。
リビジョン 3 の属性をコピーしました。
  :
  :

あとは同期したいタイミングでsvnsync syncを繰り返す。