2010年11月10日水曜日

Subversion リポジトリのバックアップ (svnsync編)

Subversion のリポジトリについて、バックアップ手順をメモ。

まずは、svnsync の場合。

svnsync は、別の PC に Subversion のリポジトリを作成し、複製するというもの。

  1. 複製用リポジトリ作成

    C:\> mkdir C:\subversion

    C:\> cd C:\subversion

    C:\subversion> svnadmin create backup


  2. pre-revprop-change.bat 作成
    C:\subversion\backup\hooks\pre-revprop-change.bat を新規に作成し、
    exit /b 0 の1行のみを記述。

    これを実施しないと、svnsync sync 実行時に以下のエラーが出力される。

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


  3. 同期を実施

    C:\subversion> svnsync init file:///subversion/backup https://www.xxx.yyy.zzz:8080/svn/svn_project
    リビジョン 0 の属性をコピーしました。

    C:\subversion> svnsync sync file:///subversion/backup
    リビジョン 1 をコミットしました。
    リビジョン 1 の属性をコピーしました。
    リビジョン 2 をコミットしました。
    リビジョン 2 の属性をコピーしました。
    リビジョン 3 をコミットしました。
    (中略)
    ファイルのデータを送信しています ..
    リビジョン 113 をコミットしました。
    リビジョン 113 の属性をコピーしました。
    C:\subversion>

    ちなみに proxy 経由で、複製元(http(s)://~)に接続する場合は、
    servers ファイル(*1)に proxy 設定の記述が必要。

    (*1) Windows XP の場合。
           C:\Documents and Settings\<ユーザー名>\Application Data\Subversion\servers

ん~。
ちなみに複製元(http(s)://~)には、Basic 認証でユーザー名/パスワードを入力する必要があるのですが、
svnsync init 及び sync ともに、ユーザー名/パスワードを指定していません。

何で指定しなくても処理できるのか、薄気味悪かったのですが、
調べてみると、以下のフォルダにあるファイルにて、ユーザー名/パスワードを記録しているようです。

C:\Documents and Settings\<ユーザー名>\Application Data\Subversion\auth\svn.simple

確かに、上記フォルダを見ると、
16進数(0~9, a~f)で構成された 30 文字くらいのファイルがあり、
そのファイルの中身を見ると、パスワードは暗号化されているようで分かりませんでしたが、
(当たり前と言えば当たり前)、ユーザー名が記述されていました。