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

[Solaris][備忘録][Subversion]Subversionで2ヶ所のリポジトリの同期を取るメモ

前回のあらすじ

参考サイト

前提

  • 以下の二つのサーバがある
    • 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サーバへ持ってくるだけ。フルバックアップしかできないのでこれしか方法はない?

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

kk_Ataka

うーん、同じリポジトリ間で再び同期とったらいけたなー
違う点はdumpファイルも絶対パスにしてたくらいだけど
関係ないよなぁ

1347359483

関連記事(この記事の初版より古い記事はリンクがグレーで表示されます)

  1. 2012/01/15 [Solaris] [Subversion] Subversionのリポジトリをサーバ間でまるごと移動する
  2. 2011/12/22 [Solaris] [Subversion] SolarisにSubversionをインストールするときのメモ
  3. 2012/12/12 [Git] [Subversion] git-svnインストールからgit svn dcommit完了までの手順
  4. 2012/04/02 [Subversion] Subversionでファイルを分けてコミットする
  5. 2013/09/05 [Git] [Subversion] Subversionのproxy設定でいつもハマるやつ
  6. 2011/12/16 [Subversion] [Unix] svn infoコマンドでリビジョン番号を抜き出す
  7. 2011/12/15 [Ruby] [Solaris] [Redmine] RedmineとApacheを連携させるPassengerをインストールできなかった
  8. 2011/12/13 [Subversion] [Unix] svn updateコマンド以外でリビジョン番号を抜き出す
  9. 2011/12/12 [Unix] [Shell] [Solaris] ファイルの拡張子を見て適切なコマンドで解凍してくれるスクリプトを組んだ
  10. 2011/12/10 [Solaris] tarコマンドでzオプションを使わずにファイルを解凍する
  11. 2011/12/09 [Unix] [Solaris] Unixでファイル圧縮・解凍するときに使うコマンドをまとめた
  12. 2011/12/08 [Solaris] Solarisで現在のOSバージョンやパッチバージョンを確認する
  13. 2011/12/01 [Solaris] DAT装置の使い方 超簡易版(Solaris)
  14. 2011/09/14 [Solaris] Solarisのパッケージを作ってみる もう少し学んだ版
  15. 2011/09/12 [Solaris] Solarisのパッケージを作ってみる