2012-04-22 14 views
6

Zmieniono nazwę oddziału w repozytorium i niedbale kontynuowałem pracę z tą samą kopią roboczą (która została wyewidencjonowana z tej gałęzi przed zmianą nazwy). Kiedy później próbowałem go zatwierdzić, zauważyłem, że kopia robocza nadal kieruje się na starą ścieżkę. Chcę wprowadzić zmiany w nowej ścieżce w repozytorium, oczywiście z zachowaniem historii itp.SVN: zmiana nazwy w przeglądarce Repo z zachowaniem kopii roboczej zsynchronizowanej

Czy SVN ma na to elegancki sposób?

Przeczytałem o poleceniach Switch and Relocate, ale nie jestem pewien, czy któryś z nich całkowicie pasuje do mojego problemu (opisane scenariusze są różne) i zawsze byłem trochę przerażony wypróbowaniem poleceń w SVN. Czy ktoś ma doświadczenie z tymi poleceniami?

Zgaduję, że mogę obejść problem przez, na przykład, kasowanie projektu o zmienionej nazwie do innej kopii roboczej, a następnie zastąpienie go zmianami (oprócz metadanych SVN). Mogę też napisać scenariusz, który znajdzie wszystkie wystąpienia starej ścieżki i brutalnie zmienić je na nowe ścieżki, ale doszedłem do tego, że musi istnieć jakaś komenda SVN.

Dzięki!

Odpowiedz

6

Jeśli adres URL repozytorium ulegnie zmianie, musisz przenieść swoją kopię roboczą na adres. Polecenie przełączanie służy do zmiany rozgałęzienia punktów roboczych. Same pojęcia są całkiem jasne.

Ale mówisz o projekcie i domyślam się, że to jest problem, z którym masz do czynienia: nie znajdziesz odniesienia do projektów w dokumentacji Subversion, ponieważ nie jest to koncepcja Subversion.

Są tam dwa podstawowe sposoby realizacji projektów w Subversion:

  1. stworzyć repozytorium dla każdego projektu:

    • https://example.com/svn/foo/trunk
    • https://example.com/svn/bar/trunk
  2. utworzyć oddział na projekt w ramach tego samego repo sitory:

    • https://example.com/svn/projects/foo/trunk
    • https://example.com/svn/projects/bar/trunk

Więc kiedy mówisz "zmienić nazwę projektu" znaczy zarówno "zmień repozytorium" (nr 1) lub "zmiana nazwy oddziału" (# 2), a rozwiązaniem jest:

  1. svn relocate Ponowne połączenie kopii roboczej z repozytorium
  2. Albo svn update, aby wprowadzić zmiany do kopii roboczej (jeśli zmiana jest w drzewie katalogów kopii roboczej) lub svn switch, aby zmienić gałąź, do której przypisane są robocze punkty kopiowania (jeśli skutecznie usunięto bieżącą gałąź).

Aktualizacja: Moja rada jest tak daleko, że zaczynasz od zera. Zmień nazwę aktualnej kopii roboczej, sprawdź nową i ponownie wprowadź zmiany oczekujące za pomocą zwykłego narzędzia porównywania plików, takiego jak WinMerge lub Kdiff3 (lub TortoiseMerge). Nie ma żadnej korzyści, próbując dowiedzieć się, jakie dokładnie zmiany zostały wprowadzone, jeśli nie są widoczne w dzienniku.

Dla przyszłości ... Nie musisz uczyć się na pamięć całej książki Subversion, ale powinieneś poznać podstawowe pojęcia, szczególnie. kiedy okazało się, że stanowią problem w twojej codziennej pracy.

+0

Cóż, nazwa repozytorium zmieniła się tylko na repozytorium, co prawdopodobnie oznacza, że ​​zmieniłem nazwę na gałąź (przepraszam, jestem noobem). – myDisplayName

+0

odnośnie przeniesienia svn, brzmi najbardziej odpowiednią akcję, ale nie zmieniłem adresu URL całego repozytorium - zmieniono tylko nazwę oddziału - czy nadal będzie dobrze działać? – myDisplayName

+0

Nie jestem również pewien odnośnie przełącznika svn - pamiętaj, że wprowadziłem zmiany w kopii roboczej, którą chcę zatwierdzić, i obawiam się relacji między aktualizacją a przełączaniem - przełącznik svn przywróci moje zmiany w kopia robocza? Czy to zadziała, jeśli oryginalna nazwa oddziału już nie istnieje? Czy utrzymałby historię logów itp. Jak zwykle? – myDisplayName

0

Czy próbowałeś użyć przełącznika svn ..

switch --relocate OLDURL TO NEWURL 

co powinno rozwiązać problem.

+0

Dziękuję, ale obawiam się, że używam tego, ponieważ zmieniłem nazwę tylko gałęzi w moim repozytorium, więc nie jestem pewien, czy odpowiada to zalecanemu scenariuszowi, w którym używasz tego polecenia ... – myDisplayName

+0

Może po prostu możesz użyć prosty przełącznik Svn NEWURL. – khmarbaise

Powiązane problemy