私の現在のSVN構造:
Path: .
URL: svn://someaddress.com.tr/project
Repository Root: svn://someaddress.com.tr
Repository UUID: -------------------------------------
Revision: 10297
Node Kind: directory
Schedule: normal
Last Changed Author: ----
Last Changed Rev: 9812
Last Changed Date: 2010-12-20 17:38:48 +0100 (Mon, 20 Dec 2010)
しかし、プロジェクト(つまりSVNサービス)は、sub.someaddress.com.tr
ではなくsomeaddress.com.tr
で動作します(someaddress.com.trはすぐに別の場所にリダイレクトされます)。
これは開発サーバーであるため、何をすべきか確信が持てませんでした。 svn switch
またはsvn switch --relocate
を使用する必要がありますか?また、svn root someaddress.com.trまたはプロジェクトブランチsomeaddress.com.tr/projectを切り替える必要がありますか?
Apache Subversionサーバーがこの新しいDNSエイリアスsub.someaddress.com.tr
に移動する場合:
Subversion 1.7以降では、 svn relocate
を使用します。 SVNサーバーの場所が変更されると、再配置が使用されます。 switch
は、ローカルの作業コピーを別のブランチまたは別のパスに変更する場合にのみ使用されます。 TortoiseSVNを使用している場合、 TortoiseSVNマニュアル の指示に従うことができます。 SVNコマンドラインインターフェイスを使用する場合は、 SVNのドキュメントのこのセクション を参照してください。コマンドは次のようになります。
svn relocate svn://sub.someaddress.com.tr/project
リポジトリの実際の内容はおそらく変更されないため、/project
を使用し続けます。
注:svn relocate
はバージョン1.7より前では使用できません(情報についてはColinMに感謝します)。古いバージョンでは次を使用します。
svn switch --relocate OLD NEW
前後にURLを削除すると、ある程度の安心感が得られます。
svn info | grep URL
URL: svn://svnrepo.rz.mycompany.org/repos/trunk/DataPortal
Relative URL: (...doesn't matter...)
そして、バージョンをチェックして(> 1.7になるように)、svn relocate
を使用するのが正しいことです:
svn --version
最後に、上記に加えて、リポジトリのURLの変更にプロトコルの変更も含まれる場合、urlおよびの前にurl( こちらを参照 )
svn relocate svn://svnrepo.rz.mycompany.org/repos/trunk/DataPortal
https://svngate.mycompany.org/svn/repos/trunk/DataPortal
もちろん、すべて1つの行にまとめられます。
svn info | grep URL:
少し自信があると感じたら、新しいsvn repo URLが接続され動作しています:
svn status --show-updates
svn diff
私の場合、svn relocate
コマンド(およびsvn switch --relocate
)は、何らかの理由で失敗しました(レポが正しく移動されなかった、または何か他のものでした)。私はこのエラーに直面しました:
$ svn relocate NEW_SERVER
svn: E195009: The repository at 'NEW_SERVER' has uuid 'e7500204-160a-403c-b4b6-6bc4f25883ea', but the WC has '3a8c444c-5998-40fb-8cb3-409b74712e46'
リポジトリ全体を再ダウンロードしたくなかったため、回避策を見つけました。私の場合はうまくいきましたが、一般的に多くのことが壊れる可能性があります(したがって、作業コピーをバックアップするか、何か問題が発生した場合はレポ全体を再チェックアウトする準備ができています)。
リポジトリのアドレスとそのUUIDは、作業コピーのSQLiteデータベースファイル.svn/wc.db
に保存されます。データベース(SQLite Browserなど)を開き、テーブルREPOSITORYを参照し、root
およびuuid
列の値を新しい値に変更するだけです。 svn info NEW_SERVER
を発行して、新しいリポジトリのUUIDを見つけることができます。
繰り返しますが、これを最後の手段として扱います。
Uが新しい空のリポジトリにコミットする場合、新しい空のリポジトリをチェックアウトして、新しいリモートリポジトリにコミットできます。
新しい空のリポジトリをチェックアウトしても、ローカルファイルは削除されません。
これを試してください:たとえば、リモートリポジトリURL: https://example.com/SVNTestcd [YOUR PROJECT PATH] rm -rf .svn svn co https://example.com/SVNTest ../[YOUR PROJECT DIR NAME] svn add ./* svn ci -m"changed repo url"