Zmień adres URL repozytorium SVN

116

Moja obecna struktura 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)

Ale nasz projekt (stąd usługa SVN) będzie działał sub.someaddress.com.trzamiast someaddress.com.tr(someaddress.com.tr zostanie wkrótce przekierowany do innego miejsca).

Ponieważ jest to serwer deweloperski, nie byłem pewien, co mam robić. Czy będę musiał użyć svn switchlub svn switch --relocate? Czy będę musiał zmienić katalog główny svn someaddress.com.tr lub gałąź projektu someaddress.com.tr/project ?

Upadły anioł
źródło

Odpowiedzi:

208

Biorąc pod uwagę, że serwer Apache Subversion zostanie przeniesiony do tego nowego aliasu DNS sub.someaddress.com.tr::

  • W przypadku Subversion 1.7 lub nowszej użyj svn relocate. Relokacja jest używana, gdy zmienia się lokalizacja serwera SVN. switchjest używany tylko wtedy, gdy chcesz zmienić lokalną kopię roboczą na inną gałąź lub inną ścieżkę. Jeśli używasz TortoiseSVN, możesz postępować zgodnie z instrukcjami zawartymi w Podręczniku TortoiseSVN . Jeśli używasz interfejsu wiersza poleceń SVN, zapoznaj się z tą sekcją dokumentacji SVN . Polecenie powinno wyglądać następująco:

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

  • Używaj dalej, /projectbiorąc pod uwagę, że rzeczywista zawartość repozytorium prawdopodobnie nie ulegnie zmianie.

Uwaga: svn relocatenie jest dostępny przed wersją 1.7 (dzięki ColinM za informacje). W starszych wersjach używałbyś:

    svn switch --relocate OLD NEW
Juanal
źródło
36
Funkcja relokacji svn nie jest dostępna przed 1.7. W przypadku wersji wcześniejszej niż 1.7 svn switch --relocate OLD NEW
używałbyś
Dodatkowe linki TortoiseSVN są bardzo pomocne, dzięki za to
MOnsDaR
Nie wiedziałem o switchpoleceniu, cała dokumentacja, którą znalazłem online, dotyczy nowszych wersji.
Dustin Cook,
Jest to przydatne, gdy muszę przenieść z adresu URL + ssh na inny niż SSH lub odwrotnie, na przykład: przełącznik svn --relocate svn + ssh: // _ svn_server _ / _ svn_project _ / _ svn_branch_ svn: // _ svn_server _ / _ svn_project. To ostatnie jest szczególnie pomocne, jeśli wykonujesz automatyczne pobieranie jako svn + ssh na kilku węzłach przy użyciu API Jenkinsa, a niektóre z nich (węzły Windows) nie mają SSH, ale musisz zalogować się do maszyny budującej i ręcznie "zaktualizować svn", aby przetestuj szybkie rozwiązanie.
Alexander Samoylov
11

Grepowanie adresu URL przed i po może dać ci spokój:

svn info | grep URL

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

Sprawdzanie wersji (która ma być> 1.7) w celu upewnienia się, że svn relocatejest to właściwe rozwiązanie:

svn --version

Na koniec, dodając do powyższego, jeśli zmiana adresu URL repozytorium obejmuje również zmianę protokołu, może być konieczne podanie adresu URL przed i po ( zobacz także tutaj )

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

Oczywiście wszystko w jednym wierszu, a potem poczuj, że wszystko poszło gładko:

svn info | grep URL:

Jeśli masz na to ochotę, trochę więcej pewności siebie, nowy adres URL repozytorium svn jest podłączony i działa:

svn status --show-updates
svn diff
Frank Nocke
źródło
5

W moim przypadku svn relocatepolecenie (a także svn switch --relocate) zawiodło z jakiegoś powodu (może repozytorium nie zostało poprawnie przeniesione lub coś innego). Napotkałem ten błąd:

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

Nie chciałem ponownie pobierać całego repozytorium, więc znalazłem obejście. W moim przypadku zadziałało, ale generalnie mogę sobie wyobrazić, że wiele rzeczy może się zepsuć (więc albo wykonaj kopię zapasową kopii roboczej, albo przygotuj się na ponowne sprawdzenie całego repozytorium, jeśli coś pójdzie nie tak).

Adres repozytorium i jego identyfikator UUID są zapisywane w .svn/wc.dbpliku bazy danych SQLite w kopii roboczej. Wystarczy otworzyć bazę danych (np. W przeglądarce SQLite), przejrzeć tabelę REPOSITORY i zmienić wartości kolumn rooti uuidna nowe. Identyfikator UUID nowego repozytorium można znaleźć, wydając svn info NEW_SERVER.

Ponownie potraktuj to jako metodę ostateczności.

Martin Pecka
źródło
@IgorGanapolsky: Czy mógłbyś być bardziej szczegółowy?
Martin Pecka
1
Jeśli uważnie czytasz mój post, nie proponuję uruchamiać żadnych poleceń. Proponuję edycję bazy danych SQLite.
Martin Pecka
Ale edycja bazy danych SQLite wymaga uruchamiania poleceń. Polecenia SQL.
Peter Flynn
Okazuje się, że nie możesz używać sqlite; musisz użyć sqlitebrowser zgodnie z sugestią. Dziwne.
Peter Flynn,
1

Jeśli chcesz zatwierdzić nowe puste repozytorium, możesz pobrać nowe puste repozytorium i zatwierdzić nowe zdalne repozytorium.
sprawdź nowe puste repozytorium nie usunie twoich plików lokalnych.
spróbuj tego: na przykład adres URL zdalnego repozytorium: 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
źródło
Co to zrobi z historią?
MattBianco