2010-04-09

Svnsyncでリポジトリの同期 (Remote To Remote)

Redmineの利用前からSubversionは使っていたのですが、当初リポジトリはWindowsのファイルサーバ上に置いていました。
ドメイン構成を行っていたので、特にApacheやSvnservの必要はなく、それはそれで楽でしたが、自宅からリポジトリを参照したくなったりすることがあるため、HTTPでアクセスできる環境に移動させることになりました。

もちろん、Gitを使うという方法もあるのですが、新しいユーザだと不慣れなことや、参考資料、クライアントが少ないこともあって、こちらは却下。

(一部ユーザはVisualStudioを使っているため、VisualStudio用のプラグインのあるSubversionのほうが何かと好都合でした)

HTTPベースに移行しても、そんなに不都合は無く、これはこれでなかなか便利です。

さて、そんな折、既存のリポジトリを、私の扱っているリポジトリに移動させてみたいというリクエストがありました。

双方のリポジトリはネットワーク的に分断されていて、HTTPでのみしかアクセスできません。

そこで、今回は、svnsyncを使ってリポジトリの同期(転送)をすることにしてみました。このsvnsync、リモートのサーバからローカルのファイルシステムにダンプするのは数回試していますが、いったんローカルにダンプして、転送先にSCPやFTPするのも面倒なので、Remote to Remote で同期させてみることにしました。

    • 元リポジトリ:         http://source.site/svn/hoge/
    • 転送先リポジトリ:   http://sync.site/svn/hoge/
    • 仲介サーバ:           とあるCentOS
      (svnsyncコマンドが使えて、両方のサーバにHTTPアクセスできればどこでもOK)

中間の某CentOSを利用して、Remoteからデータを取得し、Remoteにデータを転送するという方法です。

一応こんな感じで出来ました。

1. 事前準備

    • http://sync.site/svn/以下 に、hoge という同名の空っぽのリポジトリを作成。
    • アカウントを設定し、Webからのアクセス権限を与えておきます。
  • 上記の作業は、USVN という、WebベースのSubversion管理ツールを利用しています。

2. リモート同士での初期化

    • この作業は、仲介のCentOS上で実行します。
    • svnsync init 転送先URL 元リポジトリURL というコマンドになります。
[CentOS]$ svnsync init http://sync.site/svn/hoge/ http://source.site/svn/hoge/  --no-auth-cache --source-username hogehoge --source-password xxxxxxx --sync-username hogehoge --sync-password xxxxxxxxxx


3. sync を実施





    • 初期化の成功後は、同じく仲介のCentOS上でsync作業になります。


    • init以降は、ソースのURLは指定しなくともOKです。





[CentOS]$ svnsync http://sync.site/svn/hoge/ --no-auth-cache --source-username hogehoge --source-password xxxxxxx --sync-username hogehoge --sync-password xxxxxxxxxx


双方のサーバが分断されていても、仲介サーバがあればOKなので、これは便利。


Hudson利用して同期させるというのも良いかな…なんて思っています。