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


116

私の現在の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サービス)は(someaddress.com.trがすぐに別の場所にリダイレクトされる)sub.someaddress.com.tr代わりに機能しsomeaddress.com.trます。

開発サーバーなのでどうしたらいいのかわからなかった。svn switchまたは使用する必要がありますかsvn switch --relocate?また、svn root someaddress.com.trまたはプロジェクトブランチsomeaddress.com.tr/projectを切り替える必要がありますか?

回答:


208

Apache Subversionサーバーがこの新しいDNSエイリアスに移動されるとすると、次のようになりますsub.someaddress.com.tr

  • Subversion 1.7以降では、を使用しますsvn relocate。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

36
svn relocateは1.7より前では使用できません。1.7より前のsvn switch --relocate OLD NEW
バージョンで

追加のTortoiseSVNのリンクは、そのためのおかげで非常に有用である
MOnsDaR

switchコマンドについて知りませんでした。オンラインで見つけたすべてのドキュメントは新しいバージョンのものです。
ダスティンクック

これは、+ ssh URLから非SSHに、またはその逆に再配置する必要がある場合に便利です。たとえば、svn switch --relocate svn + ssh:// _ svn_server _ / _ svn_project _ / _ svn_branch_ svn:// _ svn_server _ / _ svn_project _ / _ svn_branch_。最後の方法は、Jenkins APIを使用して複数のノードでsvn + sshとして自動チェックアウトを実行し、一部(Windowsノード)にSSHがない場合に特に役立ちますが、ビルドマシンにログインして「svn update」を手動で行う必要があります。いくつかのクイックフィックスをテストします。
アレクサンダーサモイロフ2018年

11

前後に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 の前後を示す必要がある場合がありますこちら参照

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

5

私の場合、何らかの理由で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は.svn/wc.db、作業コピーのSQLiteデータベースファイルに保存されます。データベースを(SQLiteブラウザーなどで)開き、テーブルREPOSITORYを参照して、rootおよびuuid列の値を新しい値に変更するだけです。を発行すると、新しいリポジトリのUUIDを確認できますsvn info NEW_SERVER

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


@IgorGanapolsky:具体的に教えていただけますか?
Martin Pecka

1
私の投稿を注意深く読んだ場合、コマンドを実行することはお勧めしません。SQLite DBを編集することをお勧めします。
Martin Pecka

ただし、SQLite DBの編集にはコマンドの実行が含まれます。SQLコマンド。
Peter Flynn

sqliteは使用できないことがわかりました。推奨されるようにsqlitebrowserを使用する必要があります。変だ。
Peter Flynn

1

Uが新しい空のリポジトリにコミットする場合は、新しい空のリポジトリをチェックアウトして、新しいリモートリポジトリにコミットできます。
新しい空のリポジトリをチェックアウトしても、ローカルファイルは削除されません。
これを試してください: たとえば、リモートリポジトリのURL:https : //example.com/SVNTest cd [YOUR PROJECT PATH] rm -rf .svn svn co https://example.com/SVNTest ../[YOUR PROJECT DIR NAME] svn add ./* svn ci -m"changed repo url"


これは歴史にどのような影響を与えますか?
MattBianco
弊社のサイトを使用することにより、あなたは弊社のクッキーポリシーおよびプライバシーポリシーを読み、理解したものとみなされます。
Licensed under cc by-sa 3.0 with attribution required.