web-dev-qa-db-ja.com

SVNリポジトリのURLを変更する

私の現在の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を切り替える必要がありますか?

99
FallenAngel

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
182
Juanal

前後に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
7
Frank Nocke

私の場合、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を見つけることができます。

繰り返しますが、これを最後の手段として扱います。

5
Martin Pecka

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"

1
leo.tan