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(フックスクリプト)あたりに処理を書いておいて、リアルタイムでリポジトリ間のレプリケーションを実施しておき、障害発生時には、同期先のリポジトリをマスタにして運用する、なんてことが出来そうです。
こりゃ便利じゃ。