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ł?

Sathyajith Bhat
źródło
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!

Felix
źródło
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
jaskółka oknówka
źródło
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.

Jaskółka oknówka
źródło
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.

Bac From Vietnam
źródło
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
  

Anton Golikhoff
źródło
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ąć”

Mohd Ikram
źródło
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