01 July 2013

Backlogの容量制限が迫ってきた。その容量の大半を喰っているレポジトリのデータを退避させようとしたところから。

自前でレポジトリをdumpする方法です。

dumpは通常svnadminで行う。先ずは、それで試す

svnadmin dump https://☓☓☓☓.backlog.jp/svn/☓☓☓ > repodump

すると

svnadmin: ' https://☓☓☓☓.backlog.jp/svn/☓☓☓ ' is an URL when it should be a path

で、出来ませーん。要するに対象のレポジトリがURLだと無理らしい。

ここから本題。

この問題を解決する方法は、svnsync。 svnsyncはリモートレポジトリとローカルレポジトリを同期させる事が出来るんです。

なので、ここで説明する方法は空のレポジトリをローカルに作り、それをリモートレポジトリと同期させて最終的にそのローカルレポジトリをdumpするというもの。

1. ローカルレポジトリを作成する

以下のコマンドで適当な場所にレポジトリを作成します。(場所は適当に)

svnadmin create /Library/Webserver/Documents/repository

2. pre-revprop-changeをhookディレクトリに作成する

cd /Library/Webserver/Documents/repository/hooks

でhooksディレクトリに移動して

cp pre-revprop-change.tmpl pre-revprop-change

pre-revprop-changeをテンプレートからコピーして作成する

chmod  x pre-revprop-change

最後に実行権限を与えてあげてください。これが無いと出来ない。

これで、準備はOKなはずなんですが何故か上手く行かなかったので この記事を参考に 作成したpre-revprop-changeに

exit 0; を一行追加。

3. ローカルレポジトリとリモートレポジトリの同期

svnsync init file://localhost/Library/WebServer/Documents/☓☓☓/repository/ https://☓☓☓☓.backlog.jp/svn/

svnsync sync file://localhost/Library/WebServer/Documents/☓☓☓/repository/

4. 最後に、同期が完了したら普通にローカルレポジトリをdumpする

svnadmin dump /Library/WebServer/Documents/☓☓☓/repository/ > /Library/WebServer/Documents/repodump で、完了!これで、Backlogとかのリモートレポジトリは、完全にローカルのrepodumpに格納されます。

思ったよりも簡単に終わり。これで、Backlogの容量を逼迫しやすいレポジトリのバックアップが完了。

誰かに、勝手にプロジェクト消されても最悪レポジトリはローカルで復活できる。