Subversionで2ヶ所のリポジトリの同期を取るメモ

Tags: [ Solaris ] [ 備忘録 ] [ Subversion ] Published: 2012/04/17

前回のあらすじ

参考サイト

前提

  • 以下の二つのサーバがある
    • Aサーバ:開発を進んでいるリポジトリがある(r222)
    • Bサーバ:これからAサーバのリポジトリと同期をとりたいリポジトリがある(r111)

差分のdumpとってload(失敗)

Aサーバ

  • 進んでいる分のダンプを取る。
    • rオプションでダンプを取るリビジョンを指定できる。一つだけだとそのリビジョンだけ。(222ならリビジョン222)範囲指定する場合はAAA:BBBとする
$ svnadmin dump リポジトリパス(/home/xxx/yyyなど) -r 111:222 --incremental > repo.dump
  • これをなんらかの方法でBサーバへ移動する(ftpでもUSBでも)

Bサーバ

  • svnadmin loadコマンドで差分ダンプファイルを流しこむ。
    • リビジョンがかぶっているとエラー(リビジョン111未満のもの)
$ svnadmin load リポジトリパス(/home/xxx/yyyなど) < repo.dump
<<< オリジナルのリビジョン 111 に基づき、新しいトランザクションを開始しました
     * パスを追加しています : trunk/xxx ...svnadmin: ファイルが既に存在します: ファイルシステム 'リポジトリパス', トランザクション xxx-xx, パス 'trunk/xxx'
    • 112からダンプしたファイルをloadする…とうまくいく予定だったのだが、なんかファイルのチェックサムが違うといわれた……。
    $ svnadmin load リポジトリパス(/home/xxx/yyyなど) < repo.dump
    <<< オリジナルのリビジョン 112 に基づき、新しいトランザクションを開始しました
         * パスを編集しています : trunk/xxx/a.sh ... 完了しました。
    
    ------- 新しいリビジョン xxx を (オリジナルのリビジョン xxx からロードして) コミットしました >>>
    
    <<< オリジナルのリビジョン 113 に基づき、新しいトランザクションを開始しました
         * パスを編集しています : trunk/xxx/b.sh ... 完了しました。
         * パスを編集しています : trunk/xxx/c.sh ...
         svnadmin: ファイル '/trunk/xxx/c.sh' のチェックサムが一致しませんでした:
       期待:  f566e489511cea2fd1e6 ...
       実際:  0f76ab4f5d0625e9de9c ...

    フルダンプをとる => 新しくリポジトリを作成 => loadでも同じファイル(リビジョンは違った)でコケたので別の方法を考える……。

    hotcopy(成功)

    このサブコマンドは、すべてのフック、設定ファイル、そしてもちろんデータベースファイルを含む、リポジトリの完全な「ホット」バックアップを作成します。

    http://www.caldron.jp/~nabetaro/svn/svnbook-1.4-final/svn.ref.svnadmin.c.hotcopy.html

    ただし可搬性に乏しいとの事。今回は同マシン、OS、Subversionバージョンなので大丈夫だと思う。まずAサーバでコピー。

    $ svnadmin hotcopy リポジトリパス(/home/xxx/yyyなど) コピー先のリポジトリパス
    a /home/xxx/yyy OK
    a /home/xxx/yyy/hooks OK
    a /home/xxx/yyy/hooks/start-commit.tmpl 3K
    ...
    a /home/xxx/yyy/format 1K

    これをBサーバへ持ってくるだけ。フルバックアップしかできないのでこれしか方法はない?

    とりあえず一時しのぎはできたけど、チェックサム解消法も考えないといけないな。

    blog comments powered by Disqus

    Author: kk_Ataka / Powered by Jekyll on GitHub Pages