Subversion1.4の新機能、svnsyncを試してみた

moon


svnsyncはSubversion1.4からの新機能で、その名の通りSubversionリポジトリの同期(レプリケーション)を実行するツールです。


以下、コマンドでヘルプが確認できます。

$ svnsync help 

さて、早速レプリケーションをしてみようと思う。
まずは、いきなりsvnsync initを実行してみることにする。

$ svnsync init file:///home/rx7/test_repli file:///var/svn_test/repos/test 
svnsync: URL に対し ra_local セッションを開始できません
svnsync: リポジトリ 'file:///home/rx7/test_repli' を開けませんでした

おっと、早まり過ぎた!同期先のリポジトリの作成がまず必要なようだ。そりゃそうか。
なので、まずはリポジトリの作成をしましょう。

$ svnadmin create /home/rx7/test_repli

では改めて、もう一回。

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

おぉー、そうかそうか。
ということで、/hookディレクトリに、pre-revprop-changeを作成する。

$ echo '#!/bin/sh' > /home/rx7/test_repli/hooks/pre-revprop-change

再度、改めてもう一回。

$ svnsync init file:///home/rx7/test_repli file:///var/svn_test/repos/test
svnsync: 'pre-revprop-change' フックが次のようなエラーを出力して失敗しました:

むむっ、今度はエラー内容が何なのか書かれていないのでわからん(笑)
あ、フックスクリプトだから実行権が足りないのか。

$ chmod +x /home/rx7/test_repli/hooks/pre-revprop-change

再々度、改めまして・・・。

$ svnsync init file:///home/rx7/test_repli file:///var/svn_test/repos/test
リビジョン 0 の属性をコピーしました。

おおっ!svnsync initに成功!
では、次に同期処理を実行してみます。

$ svnsync sync file:///home/rx7/test_repli
リビジョン 1 をコミットしました。
リビジョン 1 の属性をコピーしました。
リビジョン 2 をコミットしました。
リビジョン 2 の属性をコピーしました。
リビジョン 3 をコミットしました。
リビジョン 3 の属性をコピーしました。

・・・・・以下省略・・・・・

おおっ、同期(レプリケーション)が完了しました。

ただ、普通にダンプファイルをコミットしているようなイメージ(速さ)なので、リポジトリのサイズが大きいと、ちょっと時間がかかりそうですね。
既に大きいリポジトリのミラーを0から作るようだったら、svnadmin hotcopyを使ったほうがいいかもしれませんね。
ちゃんとホットコピーできるし。


差分バックアップやリアルタイムで同期させたりするのには、すごく使えそうです。
# もちろん、同期先にデータをコミットしたりしても、同期元には反映されません(^^;)


ちなみに、同期(レプリケーション)先のリポジトリに対して、ログを見たりとか、チェックアウトしたりとか、コミットしたりとかしてみましたが、特に動きに問題は無かったです。


通常は、バックアップ目的で、マスタリポジトリのpost-commit(フックスクリプト)あたりに処理を書いておいて、リアルタイムでリポジトリ間のレプリケーションを実施しておき、障害発生時には、同期先のリポジトリをマスタにして運用する、なんてことが出来そうです。


こりゃ便利じゃ。