トップに戻る 最初に戻る 前に戻る 次へ進む
$Date: 2016-01-27 20:13:05 +0900 (2016/01/27 (水)) $
$Revision: 989 $

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

概要

svnsync によって、リポジトリのレプリケーション(複製)を作成することで バックアップを取ります。

必要な条件

リンク

svnsync の長所/短所

長所

短所

Subversion 1.4 以降のサーバーが必要。(複製元だけ必要。複製先は 1.4 以前でも OK)

処理の流れ

ここでは、例として Subversion リポジトリを指定していますが、 適宜自分のリポジトリに読み替えてください。
  1. バックアップ先のリポジトリを作成する。
    D:\tmptmp> svnadmin create test
    
  2. バックアップ先のリポジトリの hooks/pre-revprop-change (Windows では hooks/pre-revprop-change.bat )を編集する。

    hooks/pre-revprop-change の中身

    #!/bin/sh
    exit 0
    

    hooks/pre-revprop-change.bat の中身

    exit 0
    

  3. Linux/UNIXの場合はスクリプトに実行属性をつける。忘れがちな手順です。(windows では不要)
    $ chmod +x hooks/pre-revprop-change
  4. svnsync init でバックアップ先のリポジトリを初期化する。
    D:\tmptmp> svnsync init file:///tmptmp/test http://svn.apache.org/repos/asf/subversion
    リビジョン 0 の属性をコピーしました (属性 svn:sync-* は飛ばしました)。
    
    D:\tmptmp> 
    
    もし以下のエラーになった場合、pre-revprop-change(pre-revprop-change.bat) が 正しく設定されていません。pre-revprop-change が正しく設定されているか 確認してください。
    D:\tmptmp> svnsync init file:///tmptmp/test http://svn.apache.org/repos/asf/subversion
    svnsync: リポジトリが、リビジョン属性を変更できるようにはなっていません。
    管理者に pre-revprop-change フックを作成するよう頼んでください
    
  5. svnsync sync で同期する。
    D:\tmptmp> svnsync sync file:///tmptmp/test
    リビジョン 1 をコミットしました。
    リビジョン 1 の属性をコピーしました。
    リビジョン 2 をコミットしました。
    リビジョン 2 の属性をコピーしました。
    リビジョン 3 をコミットしました。
    リビジョン 3 の属性をコピーしました。
    リビジョン 4 をコミットしました。
                  ...
    

svnsync の管理用データ

svnsync では以下のプロパティで、同期元リポジトリURL、同期リビジョン等の情報を 管理しています。pre-revprop-change hook が必要になるのはこれらのプロパティを 設定するためです。

管理用プロパティの確認

svnsync の同期用のリポジトリ作成
D:\tmptmp>svnadmin create syncrepos
バージョン管理されていない属性の確認
D:\tmptmp>svn co file:///D:/tmptmp/syncrepos work
リビジョン 0 をチェックアウトしました。

D:\tmptmp>cd work

D:\tmptmp\work>svn proplist --revprop -r 0
リビジョン 0 においてバージョン管理されていない属性です:
  svn:date

D:\tmptmp\work>svn pg --revprop -r 0  svn:date
2007-09-29T04:31:40.046875Z ← 同期先リポジトリの作成時刻
以下の内容で hooks/pre-revprop-change.bat を作成
exit 0
svnsync の初期化
D:\tmptmp\work>svnsync init file:///d:/tmptmp/syncrepos http://localhost/svn
リビジョン 0 の属性をコピーしました。
バージョン管理されていない属性の確認
D:\tmptmp\work>svn proplist --revprop -r 0
リビジョン 0 においてバージョン管理されていない属性です:
  svn:sync-from-uuid
  svn:sync-last-merged-rev
  svn:date
  svn:sync-from-url

D:\tmptmp\work>svn pg --revprop -r 0  svn:sync-from-uuid
be1bd259-9a4c-394c-8e57-718af5975d4d

D:\tmptmp\work>svn pg --revprop -r 0  svn:sync-last-merged-rev
0

D:\tmptmp\work>svn pg --revprop -r 0  svn:sync-from-url
http://localhost/svn

D:\tmptmp\work>svn pg --revprop -r 0  svn:date
2007-01-08T01:34:11.187500Z ← 同期元リポジトリの作成時刻
svnsync による同期
D:\tmptmp\work>svnsync sync file:///d:/tmptmp/syncrepos
ファイルのデータを送信しています ...........
リビジョン 1 をコミットしました。
リビジョン 1 の属性をコピーしました。
ファイルのデータを送信しています ..
リビジョン 2 をコミットしました。
リビジョン 2 の属性をコピーしました。
ファイルのデータを送信しています .
リビジョン 3 をコミットしました。
リビジョン 3 の属性をコピーしました。
             ...
ファイルのデータを送信しています .
リビジョン 316 をコミットしました。
リビジョン 316 の属性をコピーしました。
ファイルのデータを送信しています .
リビジョン 317 をコミットしました。
リビジョン 317 の属性をコピーしました。
バージョン管理されていない属性の確認
D:\tmptmp\work>svn pg --revprop -r 0  svn:sync-from-uuid
be1bd259-9a4c-394c-8e57-718af5975d4d

D:\tmptmp\work>svn pg --revprop -r 0  svn:sync-last-merged-rev
317 ← 同期したリビジョン

D:\tmptmp\work>svn pg --revprop -r 0  svn:sync-from-url
http://localhost/svn

D:\tmptmp\work>svn pg --revprop -r 0  svn:date
2007-01-08T01:34:11.187500Z