synsyncで同期しているレポジトリのURL変更

以前の記事(チェックアウトしたSubversionのレポジトリのURL変更)でチェックアウトしたSubversionのレポジトリのURL変更は記載しましたが、今回は夜間にCronでsynsyncを利用してミラーリングしているレポジトリの変更です。

まずは、下記がsynsyncで同期しているレポジトリのディレクトリと、新旧のURLとなります

【レポジトリのあるディレクトリ】
/var/sub_repo

【新旧URL】
旧:https://old.example.com/svbrepo
新:https://new.example.com/svbrepo

「svnsync init」コマンドで新情報のURLに初期化して書き換えようと思いますが、以下のエラーで初期化できません

$ svnsync init file:///var/sub_repo https://new.example.com/ 
svnsync: Cannot initialize a repository with content in it

subversion自体が古く国内サイトだと情報だと「svn switch –relocate 旧URL 新URL」のコマンドで変更する情報しかありません。このコマンドでもエラーになるのでURLの書き換えはできません。
どこかにURL情報があるはずですがその設定箇所は見つけることはできませんでした

いろいろとネットで調べると、海外サイトで「How to change svn url in svnsync?」の掲示板への投稿でおなじような記事をみつけました

ミラーリングしているレポジトリのリビジョン0に「sync-from-url」にURL情報があるのでそちらを書き換えれば新しいURLに変更できるようです

1.sync-from-url の内容を確認

$ svnlook pg --revprop -r 0 /var/sub_repo svn:sync-from-url
https://old.example.com/sub_repo

2.sync-from-url の内容をファイルに出力

# ファイルに出力する
$ svnlook pg --revprop -r 0 /var/sub_repo svn:sync-from-url > /var/tmp/repo.txt

# 内容を確認する
$ cat /var/tmp/repo.txt
https://old.example.com/sub_repo

3.sedコマンドで新URLに書き換えます。ファイルの最後には改行コードがないので改行コードを削除もおこないます。ファイル名は「repo2.txt」とします

$ sed -e "s/old/new/" /var/tmp/repo.txt | tr -d "\n" > /var/tmp/repo2.txt

4.変更した「sync-from-url」の情報を反映します

$ svnadmin setrevprop /var/sub_repo -r 0 svn:sync-from-url /var/tmp/repo2.txt

5.sync-from-url の内容が書き換わったか確認

$ svnlook pg --revprop -r 0 /var/sub_repo svn:sync-from-url

6.svnsync の実行して、エラーが出ないか確認する

$ /usr/local/subversion/bin/svnsync sync file:///var/sub_repo

 

 

スポンサーリンク

0
0