Ändern Sie die SVN-Repository-URL

116

Meine aktuelle SVN-Struktur:

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)

Aber unser Projekt (daher der SVN-Dienst) wird überarbeitet sub.someaddress.com.transtatt someaddress.com.tr(someaddress.com.tr wird bald an einen anderen Ort umgeleitet).

Da es sich um den Entwicklungsserver handelt, konnte ich mir nicht sicher sein, was ich tun soll. Muss ich verwenden svn switchoder svn switch --relocate? Muss ich auch svn root someaddress.com.tr oder den Projektzweig someaddress.com.tr/project wechseln ?

Gefallener Engel
quelle

Antworten:

208

Da der Apache Subversion - Server wird auf diesen neuen DNS - Alias verschoben werden: sub.someaddress.com.tr:

  • Verwenden Sie mit Subversion 1.7 oder höher svn relocate. Relocate wird verwendet, wenn sich der Standort des SVN-Servers ändert. switchwird nur verwendet, wenn Sie Ihre lokale Arbeitskopie in einen anderen Zweig oder einen anderen Pfad ändern möchten. Wenn Sie TortoiseSVN verwenden, können Sie den Anweisungen aus dem TortoiseSVN-Handbuch folgen . Wenn Sie die SVN-Befehlszeilenschnittstelle verwenden, lesen Sie diesen Abschnitt der SVN-Dokumentation . Der Befehl sollte folgendermaßen aussehen:

    svn relocate svn://sub.someaddress.com.tr/project

  • Verwenden Sie weiter /project, da sich der tatsächliche Inhalt Ihres Repositorys wahrscheinlich nicht ändert.

Hinweis: svn relocateist vor Version 1.7 nicht verfügbar (danke an ColinM für die Info). In älteren Versionen würden Sie verwenden:

    svn switch --relocate OLD NEW
Juanal
quelle
36
svn relocate ist vor 1.7 nicht verfügbar. Für Pre 1.7 würden Sie verwendensvn switch --relocate OLD NEW
ColinM
Die zusätzlichen TortoiseSVN-Links sind sehr hilfreich, danke dafür
MOnsDaR
switchIch wusste nicht über den Befehl Bescheid. Die gesamte Dokumentation, die ich online gefunden habe, ist für neuere Versionen.
Dustin Cook
Dies ist praktisch, wenn ich von der + ssh-URL nach Nicht-SSH oder umgekehrt wechseln muss, zum Beispiel: svn switch - svn + ssh: // _ svn_server _ / _ svn_project _ / _ svn_branch_ svn: // _ svn_server _ / _ svn_project _ / _ svn_. Letzteres ist besonders hilfreich, wenn Sie das automatische Auschecken als svn + ssh auf mehreren Knoten mithilfe der Jenkins-API durchführen und einige von ihnen (Windows-Knoten) kein SSH haben. Sie müssen sich jedoch beim Build-Computer anmelden und "svn update" manuell bei Testen Sie eine schnelle Lösung.
Alexander Samoylov
11

Wenn Sie die URL vorher und nachher durchsuchen, können Sie beruhigt sein:

svn info | grep URL

  URL: svn://svnrepo.rz.mycompany.org/repos/trunk/DataPortal
  Relative URL: (...doesn't matter...)

Die Überprüfung Ihrer Version (um> 1,7 zu ​​sein), um sicherzustellen, svn relocateist die richtige Verwendung:

svn --version

Wenn Ihre Repository-URL-Änderung auch eine Änderung des Protokolls beinhaltet, müssen Sie möglicherweise die Vorher- und Nachher-URL angeben ( siehe auch hier ).

svn relocate svn://svnrepo.rz.mycompany.org/repos/trunk/DataPortal
    https://svngate.mycompany.org/svn/repos/trunk/DataPortal

Natürlich alles in einer einzigen Zeile. Danach haben Sie das gute Gefühl, dass alles reibungslos verlief:

svn info | grep URL:

Wenn Sie Lust dazu haben, ein bisschen mehr Selbstsicherheit, ist die neue SVN-Repo-URL verbunden und funktioniert:

svn status --show-updates
svn diff
Frank Nocke
quelle
5

In meinem Fall ist der svn relocateBefehl (sowie svn switch --relocate) aus irgendeinem Grund fehlgeschlagen (möglicherweise wurde das Repo nicht richtig verschoben oder etwas anderes). Ich habe diesen Fehler festgestellt:

$ 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'

Ich wollte nicht das gesamte Repository erneut herunterladen, daher habe ich eine Problemumgehung gefunden. In meinem Fall hat es funktioniert, aber im Allgemeinen kann ich mir vorstellen, dass viele Dinge kaputt gehen können (also sichern Sie entweder Ihre Arbeitskopie oder seien Sie bereit, das gesamte Repo erneut auszuchecken, wenn etwas schief geht).

Die Repo-Adresse und ihre UUID werden in der .svn/wc.dbSQLite-Datenbankdatei in Ihrer Arbeitskopie gespeichert. Öffnen Sie einfach die Datenbank (z. B. im SQLite-Browser), durchsuchen Sie die Tabelle REPOSITORY und ändern Sie die Werte für rootund uuidin die neuen. Sie finden die UUID des neuen Repos durch Ausgabe svn info NEW_SERVER.

Behandeln Sie dies erneut als letzten Ausweg.

Martin Pecka
quelle
@IgorGanapolsky: Könnten Sie genauer sein?
Martin Pecka
1
Wenn Sie meinen Beitrag sorgfältig lesen, empfehle ich nicht, Befehle auszuführen. Ich schlage vor, die SQLite-Datenbank zu bearbeiten.
Martin Pecka
Zum Bearbeiten der SQLite-Datenbank müssen jedoch Befehle ausgeführt werden. SQL-Befehle.
Peter Flynn
Es stellt sich heraus, dass Sie SQLite nicht verwenden können. Sie müssen sqlitebrowser wie vorgeschlagen verwenden. Seltsam.
Peter Flynn
1

Wenn Sie ein neues leeres Repo festschreiben möchten, können Sie das neue leere Repo auschecken und ein neues Remote-Repo festlegen.
Wenn Sie ein neues leeres Repo auschecken, werden Ihre lokalen Dateien nicht gelöscht.
Versuchen Sie Folgendes: Beispiel: Remote-Repo-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"

leo.tan
quelle
Was wird das mit der Geschichte tun?
MattBianco