SHOEISHA iD

※旧SEメンバーシップ会員の方は、同じ登録情報(メールアドレス&パスワード)でログインいただけます

CodeZine編集部では、現場で活躍するデベロッパーをスターにするためのカンファレンス「Developers Summit」や、エンジニアの生きざまをブーストするためのイベント「Developers Boost」など、さまざまなカンファレンスを企画・運営しています。

japan.internet.com翻訳記事

エンタープライズ環境におけるSubversionの複製アーキテクチャ

  • X ポスト
  • このエントリーをはてなブックマークに追加

よりスマートな方法:svnsyncを使ってリポジトリを同期させる

 svnsyncを使用すれば、Subversionリポジトリをもっと効率的にバックアップできます。この便利なツールはSubversion 1.4から導入されたもので、リビジョンを(コミット操作の一連の流れの中で)複製サーバーに送ります。複製サーバーは基本的に、送られてきた個々のコミットを自身が持つリポジトリのコピーに対して「リプレイ」します。この方法はリポジトリ全体を毎回バックアップするよりもはるかに効率的です。なぜなら、前回の同期以降に実行されたコミットに関するデータだけが伝送されるからです。さらに、svnsyncは標準のSubversionプロトコル(svn://またはhttp://)を使ってネットワーク経由で実行することもできます。

 svnsyncのセットアップは簡単です。最初に必要なのは、利用可能な状態のSubversionリポジトリを2つ用意することだけです。1つは複製元となるリポジトリで、もう1つは空のリポジトリです。空のターゲットリポジトリは複製サーバー上に作成します。その際、他のSubversionリポジトリを作成するときと同じく、次のようなsvnadminコマンドを使用します。

$ svnadmin create /var/svn/repos-mirror

 重要なのは、リビジョンデータがいっさい含まれていない状態のターゲットリポジトリを用意することです。原則的に、ターゲットリポジトリはsvnsyncのみが使用する読み取り専用リポジトリにします。このバックアップリポジトリをsvnsyncの処理とは別に更新しようとすると、Subversionが大いに混乱してしまいます。

 この複製サーバーへのバックアップを開始する前に、複製サーバー側の設定を1つ変更する必要があります。同期プロセスの際に、svnsyncは複製サーバー上のリビジョンプロパティを更新しなければなりません。新規Subversionリポジトリでは、リビジョンプロパティの変更はデフォルトでアクティブになっていません。そこで、pre-revprop-changeフックスクリプトを記述してアクティブにする必要があります。これはそれほど難しい作業ではありません。ターゲットSubversionリポジトリのhooksディレクトリにサンプルのフックスクリプトテンプレートが含まれているので、実際に内容を見て、各スクリプトの働きを調べてみてください。

 リビジョンプロパティを更新できるようにするには、ファイル「pre-revprop-change.tmpl」の名前を「pre-revprop-change」(UNIXの場合)または「pre-revprop-change.bat」(Windowsの場合)に変更し、必要であればこのファイルを実行可能にします。その後、このスクリプトを書き換えて、常に0を返すようにします。次に例を示します。

#!/bin/sh
exit 0

 これで、リビジョンプロパティに対する更新処理は、すべて例外なく許可されます。

 次に、ターゲットリポジトリと同期するようにメインリポジトリをセットアップします。そのためには、次のコマンドを使用します。

$ svnsync init svn://svnmirror svn://svnrepos

 このコマンドでは、svnreposリポジトリをsvnmirror上のリポジトリに同期させる準備をします。実際に同時を実行するには、次のようにしてsvnsync syncを実行します。

$ svnsync sync svn://svnmirror
Committed revision 1.
Copied properties for revision 1.
Committed revision 2.
Copied properties for revision 2.
Committed revision 3.
Copied properties for revision 3.
Committed revision 4.
Copied properties for revision 4.
Committed revision 5.
Copied properties for revision 5.
Committed revision 6.
Copied properties for revision 6.
Committed revision 7.
Copied properties for revision 7.
Committed revision 8.
Copied properties for revision 8.
Committed revision 9.
Copied properties for revision 9.
Committed revision 10.
Copied properties for revision 10.
...

 これが完了すると、ターゲットリポジトリにメインリポジトリのコピーが含まれている状態になります。

次のページ
複製サーバーを保護する

この記事は参考になりましたか?

  • X ポスト
  • このエントリーをはてなブックマークに追加
japan.internet.com翻訳記事連載記事一覧

もっと読む

この記事の著者

japan.internet.com(ジャパンインターネットコム)

japan.internet.com は、1999年9月にオープンした、日本初のネットビジネス専門ニュースサイト。月間2億以上のページビューを誇る米国 Jupitermedia Corporation (Nasdaq: JUPM) のニュースサイト internet.comEarthWeb.com からの最新記事を日本語に翻訳して掲載するとともに、日本独自のネットビジネス関連記事やレポートを配信。

※プロフィールは、執筆時点、または直近の記事の寄稿時点での内容です

John Ferguson Smart(John Ferguson Smart)

政府機関や企業の国内外の開発チームから成る大規模なJ2EEプロジェクトに数多く携わる。J2EEのアーキテクチャと開発、およびITプロジェクト管理を専門とする。オープンソースのJavaテクノロジの経験も豊富。自らのテクニカルブログを公開中(www.jroller.com/page/wakaleo)。

※プロフィールは、執筆時点、または直近の記事の寄稿時点での内容です

この記事は参考になりましたか?

この記事をシェア

  • X ポスト
  • このエントリーをはてなブックマークに追加
CodeZine(コードジン)
https://codezine.jp/article/detail/3286 2008/11/28 14:00

おすすめ

アクセスランキング

アクセスランキング

イベント

CodeZine編集部では、現場で活躍するデベロッパーをスターにするためのカンファレンス「Developers Summit」や、エンジニアの生きざまをブーストするためのイベント「Developers Boost」など、さまざまなカンファレンスを企画・運営しています。

新規会員登録無料のご案内

  • ・全ての過去記事が閲覧できます
  • ・会員限定メルマガを受信できます

メールバックナンバー

アクセスランキング

アクセスランキング