Subversion のリポジトリを移行
最近流行りにのって自転車通勤を始めようか迷っています。こんにちは、nakamura です。
ソースコードのバージョン管理に Subversion を利用されている会社は多いと思います。多分に漏れず我が社もそうですが、長らく使っているといつかやらなくてはならないのがリポジトリの移行ではないでしょうか。今回たまたまリポジトリの移行を行う機会がありました。作業的にはさほど複雑ではないですが、そうそう頻繁に行うものでもないので備忘録的に書きつつ、御覧になっている皆様の参考にもなればと思います。
リポジトリのダンプ、リストア
リポジトリを丸ごとコピーする方法です。データベースのダンプ、リストアとイメージ的には近いです。
まずはリポジトリをダンプ。
svnadmin dump PATH_TO_REPOSITORY > DUMP_FILE_NAME
容量が大きそうな場合は同時に圧縮してしまいましょう。
svnadmin dump PATH_TO_REPOSITORY | gzip > DUMP_FILE_NAME.gz
移行先のリポジトリを作成。
mkdir -p PATH_TO_REPOSITORY
svnadmin create PATH_TO_REPOSITORY
ダンプファイルを移行先にリストア
svnadmin load PATH_TO_REPOSITORY < DUMP_FILE_NAME
圧縮ファイルを展開しつつリストアする場合はこちら。
zcat DUMP_FILE_NAME.gz | svnadmin load PATH_TO_REPOSITORY
以上でリポジトリのコピーは完了です。
作業コピーを切り替える
リポジトリをコピーしただけでは実際に新しい Subversion サーバでの運用を開始出来るわけではなく、個々の作業コピーを新しいリポジトリに切り替えないといけません。僕が探した中では 2 つ方法を見つけました。ちなみにいずれの方法も作業コピーの一番上のディレクトリで実行するのが望ましいと思われます。
TortoiseSVN を使う
さすが TortoiseSVN 、リポジトリの切り替えもばっちりです。通常の trunk <-> branch の切り替えの場合は『切り替え』を使いますが、全く別のリポジトリに切り替える場合は『再配置』を使用します。
『先URL』のボックスに新しいリポジトリの URL を入力すれば OK です。
svn コマンドを使う
svn コマンドでももちろん切り替えは可能です。svn switch で trunk <-> branch 間の切り替えが可能ですが、別リポジトリに切り替える場合は --relocate オプションを付け足します。
svn switch --relocate OLD_REPOSITORY_URL NEW_REPOSITORY_URL
下記のコマンドで切り替わったかの確認が出来ます。
svn info
『URL』の箇所が新しいリポジトリになっていれば切り替え完了です。
そうそう発生する作業ではないですが、おそらく Subversion を使っている以上いつかは行う必要が出てくるはずです。その時にはぜひ参考にしてみてください。