参考サイト:Subversion でリポジトリの場所が変わったら
参考サイト:svn_switch
参考サイト:Subversion_FAQ
#概要
サーバが老朽化したとか、あっちのサーバに統合するとかで、
リポジトリのURLが変わるのはよくあること。
ローカルの作業ディレクトリを一旦亡き者にして、再度チェックアウトしてもいいのだけど、
SVNで管理してたのは、ソースだけだったので実行モジュールとか消えてしまっても本当にいいか不安がある。
作業ディレクトリがこっそり持っているリポジトリのURLだけを変更できればいいのならば、もっとスマートにやりたい。
#コマンド
$ svn switch --relocate <古いリポジトリ> <新しいリポジトリ>
これで変更が可能なんだが、、、、、
実際にやってみると
$ svn switch --relocate svn://old.com/trunk svn://new.jp/trunk
svn: PROPFIND リクエスト (相手: '/trunk') が失敗しました
svn: PROPFIND (URL: '/trunk'): 403 Forbidden (http://new.jp)
エラーがでてしまった(/_;)
いろいろ情報を探していたら、どうやらsvnのキャッシュに以前にアクセスした
ユーザID等が残っていて、更新対象の作業ディレクトリのユーザID等がキャッシュと
違ったために認証に失敗していたらしい。
というわけで、ユーザID等を指定すれば、うまくいくはず。
$ svn switch --relocate --username <ユーザID> --password <パスワード> svn://old.com/trunk svn://new.jp/trunk
で、解決できればよかったのだけど、
自分は変更前のユーザID、パスワードを知らないのでこの方法が使えなかった。
それで、どうしたかというとキャッシュを覗いて無理やり書き換えて対応した。
キャッシュの場所:~/.subversion/auth/svn.simple/<英数字の羅列>
$ cat ~/.subversion/auth/svn.simple/<英数字の羅列>
※英数字の羅列のファイルは一つづつ中身を確認してください
K 8
passtype
V 6
simple
K 8
password
V 7
old_pass
K 15
svn:realmstring
V 41
<http://old.com:80> Subversion Repository
K 8
username
V 7
old_user
END
これをよくみるとsvn:realmstringの後にリポジトリの配置先があって、同じようにユーザIDとパスワードもある。
ここから古いリポジトリのユーザIDとパスワードを新しいリポジトリのキャッシュに手で書き換えてsvn switch
。
OKこれでできた。
。。。。ってセキュリティ的にこれでいいのか?と思ってたらやっぱり同じ考えの人がいた。しかも6年前に。
簡単に復号できても平文よりマシ
パスワードを完全に暗号化するのは無理でも、難読化するパッチはおそらくコレ
http://svn.haxx.se/dev/archive-2006-10/0508.shtml
・・・ソースからコンパイルしなおす必要があるのですネ。
・・・6年前のパッチだから、今のバージョンでもそのままパッチが当てられるのか検討する必要があるのですネ。