Subversionで2ヶ所のリポジトリの同期を取るメモ
参考サイト
差分の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サーバへ持ってくるだけ。フルバックアップしかできないのでこれしか方法はない?
とりあえず一時しのぎはできたけど、チェックサム解消法も考えないといけないな。