svnsync で Subversion レポジトリを引っ越す svn+ssh://

Amazon EC2 のレンタルサーバ上の自前のレポジトリに移動させたメモ。
svnsync を使うと、更新履歴も含めてレポジトリを同じ状態に再現できます。
クライアントから新レポジトリへのアクセスは、svn+ssh:// を使います。
svn クライアントの使い勝手は、従来の http://、https:// と変わりません。
svn+ssh のメリット
・既存のサーバが使える。EC2 だと大容量でもディスク単価が安い
・ssh 経由なので専用デーモンが要らないし、ファイアウォールの追加設定も不要
・ssh の認証が使われるので、Subversion 専用のアカウント管理が不要
・.ssh/identity 秘密鍵により、パスワード不要で Subversion を操作できる
svn+ssh のデメリット
・単体では HTTP サーバがないので、ウェブブラウザからの閲覧ができない
(個別に用意する)
・以下の手順では、複数アカウントで1つのレポジトリを共有することはできません
(共有したい場合は、レポジトリ専用の UNIX アカウントを作って共有する等)
引越し手順
引越し先の新サーバ(ssh ログイン可能な UNIX サーバ)で以下の操作を行います。
引越し元の旧サーバでの操作は不要です。
つまり、どの Subversion レポジトリサービスからの移行でも同様の手順になります。
0. Subversion のインストール(念のため)
$ sudo yum install subversion
1. Subversion レポジトリを作る(一般ユーザ権限)
$ mkdir ~/myrepository
$ svnadmin create ~/myrepository
2. svnsync の準備(フックの設定が必要らしい)
$ vi ~/myrepository/hooks/pre-revprop-change
#!/bin/sh
exit 0
$ chmod 755 ~/myrepository/hooks/pre-revprop-change
3. svnsync の実行(init→sync)
$ svnsync init file:///home/u-suke/myrepository http://svn.excample.com/svn
Copied properties for revision 0.
$ svnsync sync file:///home/u-suke/myrepository
Committed revision 1.
Copied properties for revision 1.
Committed revision 2.
Copied properties for revision 2.
:
svn クライアント側は、
シンプルに古いのは捨てて(移動して)、checkout (svn co) し直すと分かりやすいか。
(5/10追記:svnsync では uuid が変わるので、switch --relocate では切り替えられない)
checkout しなおす(5/10追記)
移行先の svn レポジトリは、以下のような URL で表せます。
svn+ssh://ユーザ名@ホスト名/home/ユーザ名/myrepository
クライアント側では、以下のようにして、checkout し直します。
$ svn co svn+ssh://u-suke@remote.host/home/u-suke/myrepository
ssh で u-suke@remote.host にパスワード不要でログインできる設定になっていると
http/https のときと同様に svn を手軽に使うことができます。
エラーメッセージと対応表
svnsync から出る主なエラーメッセージと対応手順。
svnsync: Repository has not been enabled to accept revision propchanges;→「hooks/pre-revprop-change」ファイルを設置する。
ask the administrator to create a pre-revprop-change hook
svnsync: 'pre-revprop-change' hook failed with error output:→chmod 755 を行う。
svnsync: Session is rooted at 'http://svn.excample.com/svn/foobar' but→下位ディレクトリでなく、レポジトリのルートからsyncする必要がある。
the repos root is 'http://svn.excample.com/svn'
この記事へのコメント