SVN · 1 min read · Feb 13, 2026

SVKを使用してSVNリポジトリの読み取り専用ミラーを作成する

SVKを使用してSVNリポジトリの読み取り専用ミラーを作成する

あなたのオープンソースプロジェクトのためにSVNを持っていて、それをオープンソースプロジェクトをホストするリモートロケーション(例えば、SourceForge.netやdev.java.net)にミラーリングしたいとします。アカウントとプロジェクトの登録の段階は省略し、すでに資格情報とSVNリポジトリのURLを持っていると仮定します。また、DebianまたはUbuntuを使用しており、SVNがApache httpdの下で稼働していると仮定します。

SVN 1.4にデフォルトで付属しているsvnsyncというツールがあり、正確に同じ目的のために設計されていますが、この場合にそれを使用できない理由が1つあります。それは、ターゲットリポジトリに存在するカスタムsvnフックが必要であり、私たちのケースではそれをカスタマイズすることが不可能だからです。

まずSVKをインストールします:

# aptitude install svk

ざっくり言うと、SVKはSVNのスーパーセットであり、リポジトリの同期などの高度なトリックを可能にします。SVKの詳細なガイドとして参照できる「Version Control with SVK」という本があります。簡潔に説明します。概念は、すべてのSVNリポジトリ(あなたのプライマリリポジトリと情報をダンプするリポジトリ)を含むSVKリポジトリ(「デポ」)を作成し、これらのコピーを同期させることです。

コミットが行われるたびにリポジトリを同期させたいので、SVNフックの手順が利用され、私たちのケースではそれがapache httpdユーザーの下で行われます。

では、簡単にするために、そのアカウントでログインし、必要なルーチンを実行しましょう。

# su www-data

今必要なのは、デフォルトのデポを初期化することです。

$ svk depotmap

デポを保存したい場所を指定するためにパスを編集します。私は/var/opt/svk/localを選びます。

これで、少なくとも2つのミラーを作成できるようになります:1つはローカルリポジトリ用、もう1つはリモート用(複数のミラーを持つことを妨げるものはありません):

$ svk mirror //local file:///var/opt/svn

これでリポジトリの場所(「local」と名付けられた)をsvnリポジトリが存在するファイルシステムの場所に直接マッピングしました。

$ svk mirror //remote https://myproject.svn.sourceforge.net/svnroot/myproject

リモートリポジトリについても同様です。この場合、SourceForge.netにホストされています。証明書を永続的に受け入れ、キャッシュするためにユーザー名とパスワードを提供する必要があります。
リモートリポジトリは読み取り専用になるため、1回だけ同期します。

$ svk sync //remote

その後、後でpost-commitスクリプトによって実行されるアクションを実行します。

$ svk sync //local  
$ svk smerge --baseless --incremental --verbatim //local //remote

後者のコマンドは、すべてのコミットの詳細を保持しながらローカルリポジトリをリモートリポジトリと同期します。
これをローカルリポジトリへのコミット後に自動的に行うために、ローカルSVNリポジトリのhooksディレクトリにpost-commitという名前のファイルを作成し、そこにこれらのコマンドを入れます。次のように実行可能にします。

$ chmod +x ./post-commit #''hooks''ディレクトリにいると仮定

それで終わりです。確認してみてください。

<このチュートリアルは以下によって作成されました>

Alex Yanchenko, www.centricware.org

Share: X/Twitter LinkedIn

新しい投稿を受信箱で受け取る

スパムはありません。いつでも購読を解除できます。