Chcę usunąć wersje z mojego repozytorium SVN


33

Najnowsze wersje mojego repozytorium kodu zostały uszkodzone i zdestabilizowały moją aplikację. Chcę wrócić do wcześniejszej wersji.

Ale nie chcę po prostu używać „przywracania” na mojej kopii roboczej; Naprawdę chcę usunąć moją wersję główną i kilka wersji wcześniejszych w moim repozytorium, tym samym „przywracając” moje repozytorium do wcześniejszej wersji, która stałaby się wersją główną. Czy ktoś wie, jak bym to zrobił?


1
Naprawdę nie możesz usunąć starych wersji, wszystko, co możesz zrobić, to cofnąć zmiany i zatwierdzić je, jak wspomniał Felix. Ciekawe sidenote, Git (a także inne rozwiązania kontroli wersji) faktycznie pozwala naprawdę usunąć wersje.
— davr

3
Tak, możesz, potrzebujesz tylko dostępu do repozytorium SVN za pomocą svnadmin. Zobacz moją odpowiedź poniżej.
— martin

davr ma techniczną rację. To, co opisujesz, to zrzucenie wszystkich poprawek oprócz tych złych, a następnie zrzucenie tego na stare repozytorium. Moim zdaniem nie jest to tak naprawdę „usuwanie” wersji.
— Sirex,

Odpowiedzi:


12

Może ten link pomaga:

http://www.sampablokuper.com/2009/03/27/svn-revert-to-revision/

Zacytować:

  1. Przejdź do głównego katalogu w kopii roboczej (zakładając, że chcesz przywrócić całą kopię roboczą).

  2. uruchom, svn revertaby przywrócić pliki kopii roboczej do stanu, w jakim były w momencie ostatniego zatwierdzenia / wyrejestrowania.

  3. uruchom, svn status -vaby zobaczyć, który numer wersji odpowiada teraz twojej kopii roboczej (jest to najwyższy numer wersji na liście, który svn status -vprodukuje).

  4. uruchom svn merge -rXX:YYgdzie XXjest liczba uzyskana w poprzednim kroku i YYliczba rewizji, którą chcesz przywrócić.

  5. Gotowy! Możliwym wyjątkiem jest to, że pliki w kopii roboczej, które nie istniały podczas YYpierwotnej wersji, nadal tam będą, ponieważ domyślnie svn nie usuwa rzeczy. Jeśli chcesz się ich pozbyć, uruchom svn del [filename]każdy z nich.

  6. Dobra robota! Teraz graj z kopią roboczą, jakby te wszystkie pośrednie zmiany nigdy nie miały miejsca. A kiedy będziesz gotowy do podjęcia wysiłków, po prostu użyj svn commit jak zwykle!


1
W systemie Windows OS, opcja nr 4 uruchom svn merge -rXX:YY .Pamiętaj, aby umieścić kropkę na końcu wiersza w celu odniesienia do bieżącego katalogu. A w TortoiseSVN istnieje opcja odwrócenia scalania.
— Shantha Kumara

3
To tak naprawdę nie powraca do „wcześniejszej wersji, która stałaby się wersją główną”. Nie czyni starszej wersji HEAD. Raczej tworzy nową GŁOWĘ. Zobacz odpowiedź Martina.
— Matthew Flaschen

Zmodyfikowałem odpowiedź, dodając uwagę Shanthy na temat okresu końcowego. To samo dotyczy również * nix.
— Mike Kormendy

72

To zadziałało dla mnie. Biorąc pod uwagę, że masz wersję 1234 jako HEAD i chcesz cofnąć ostatnie trzy zmiany:

svnadmin create newrepo
svnadmin dump -r 0:1231 repo | svnadmin load newrepo
mv repo oldrepo
mv newrepo repo

12
+1. Jesteś jedynym, który zrozumiał pytanie i udzielił konkretnej odpowiedzi.
— Matthew Flaschen

6
To technicznie właściwa odpowiedź. Należy jednak zauważyć, że oprócz tego, że jest to dość skomplikowane, spowoduje to również unieważnienie wszystkich pobranych kopii - więc musisz powiadomić każdego, kto również korzysta z repozytorium.
— sleske,

1
szybkie i łatwe do rzeczy, a właściwie tego, o co poprosił plakat.
— połączono

7
Tak długo, jak upewnisz się, że skopiujesz również UUID repozytorium do nowego repozytorium (patrz „svnadmin setuuid”, kopiowanie z UUID w „svn info” na starym repozytorium), tylko transakcje zaktualizowane do wersji, które wycinasz, będą zostać unieważnionym.
— Bryan Petty,

1
W nowych repozytoriach może być konieczne poprawienie uprawnień do plików lub skopiowanie plików w katalogach hook / conf
— AdamS

5

Wiem, że to stare pytanie, ale właśnie znalazłem, jak to zrobić w Windows / TortoiseSVN.

Zgodnie z sugestią komentarza nie można „usunąć” wersji, ale można zrobić bardziej aktualną wersję, która jest taka sama jak wersja, do której chcesz przywrócić.

  1. Sprawdź HEAD repozytorium dla katalogu, z którego chcesz przywrócić wersję.
  2. Załaduj widok „Pokaż dziennik” do TortoiseSVN dla katalogu najwyższego poziomu, który chcesz przywrócić (np. „Trunk”).
  3. Kliknij prawym przyciskiem myszy wersję, którą chcesz usunąć. UWAGA: jest to wersja, którą chcesz usunąć, a nie ta, którą chcesz przywrócić.
  4. Wybierz „Cofnij zmiany z tej wersji”.
  5. Kliknij „Tak” w wierszu polecenia.
  6. Zaktualizuj zamówienie jak zwykle, ale do „HEAD”.
  7. Zatwierdź to z powrotem.

Następnie przejdziesz do wszystkich, którzy go sprawdzili, i poprosi ich o aktualizację i usunięcie wszelkich nowych plików.

Musisz także upewnić się, że wszyscy wiedzą, czym była ta wersja, i potencjalnie zaktualizować opis.


czym to się różni od zwykłej procedury „przywracania”?
— Tomer W

Cofnij po prostu zmienia kopię roboczą do tego, co jest w repozytorium ... w ten sposób HEAD raportu odzwierciedla stan każdego poprzedniego zatwierdzenia.
— Martin

1
Dzięki za to - Wykonanie tego w sposób SVN z żółwiem było właśnie tym, czego potrzebowałem, aby cofnąć błędne zatwierdzenie :)
— Dr. Andrew Burnett-Thompson

W oknie dziennika znajduje się także pozycja menu kontekstowego „ Przywróć tę wersję ”.
— Uwe Keim

4

W tym celu można użyć zrzutu / ładowania.

Możesz także użyć svnsync, aby wykonać kopię zapasową niektórych wersji.

Jeśli masz duże repozytorium, zajmie to trochę czasu.


3

Dla mnie (VisualSVN, 30-HEAD) działa to:

  del C: \ Repositories \ MyRepo \ revs \ 0 \ 30
  del C: \ Repositories \ MyRepo \ revs \ 0 \ 29
  del C: \ Repositories \ MyRepo \ revs \ 0 \ 28
  del C: \ Repositories \ MyRepo \ revprops \ 0 \ 30
  del C: \ Repositories \ MyRepo \ revprops \ 0 \ 29
  del C: \ Repositories \ MyRepo \ revprops \ 0 \ 28
  echo 27> C: \ Repositories \ MyRepo \ db \ current
  


Jak to jest lepsze niż inne odpowiedzi?
— Toto

Jest znacznie szybszy.
— Anton Golikhoff,

0

Przejdź do terminala i przejdź do repozytorium svn: teraz wpisz

aktualizacja svn -r „numer wersji, którą chcesz cofnąć”


2
Witamy w Super User! Przeczytaj uważnie pytanie ponownie. Twoja odpowiedź nie odpowiada na pierwotne pytanie. OP mówi: „Nie chcę po prostu używać„ przywróć ”na mojej kopii roboczej”
— DavidPostill
Korzystając z naszej strony potwierdzasz, że przeczytałeś(-aś) i rozumiesz nasze zasady używania plików cookie i zasady ochrony prywatności.
Licensed under cc by-sa 3.0 with attribution required.