Jak mogę wrócić do starszej wersji naszego kodu w Subversion?

Pracuję nad projektem z przyjacielem i chcę wrócić do starszej wersji naszego kodu i ustawić ją na bieżącą. Jak to zrobić?

Używam "anksvn" na vs08.

Mam wersję, którą chcę na moim komputerze, ale commit nie działa; komunikat, który otrzymuję jest "zatwierdzenie nie powiodło się, plik lub katalog jest nieaktualny."

Mam również klienta subversion na moim komputerze.

 445
Author: Chen Kinnrot, 2009-05-02

13 answers

Zasadniczo musisz "scalić wstecz" - zastosować różnicę między bieżącą i poprzednią wersją do bieżącej wersji (więc kończysz z roboczą kopią wyglądającą jak stara wersja), a następnie zatwierdzić ponownie. Na przykład, aby przejść z wersji 150 (bieżącej) z powrotem do wersji 140:

svn update
svn merge -r 150:140 .
svn commit -m "Rolled back to r140"

Czerwona Księga Subversion ma dobry rozdział na ten temat .

 715
Author: Jon Skeet,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/doraprojects.net/template/agent.layouts/content.php on line 54
2015-05-08 11:54:40

Powodem, dla którego nie możesz nic zrobić bezpośrednio z dobrą kopią, którą masz na komputerze, jest to, że jest .foldery svn wiedzą, że jest to kod z przeszłości, więc wymaga aktualizacji. Ale możesz zatwierdzać zmiany tylko na samym początku historii subversion.

Możesz użyć

svn update -r <earlier_revision_number>

Aby sprawdzić różne starsze wersje twojego projektu, aż znajdziesz odpowiedni numer wersji Twojej dobrej wersji. Gdy go znajdziesz, zaktualizuj do najnowszej wersji (head), a następnie zastosuj SVN merge jak sugerowano powyżej.

Jeśli naprawdę nie możesz go znaleźć i musisz zatwierdzić kopię na swoim komputerze, a następnie uzyskać świeżą aktualizację do najnowszej wersji i skopiować "dobrą" wersję nad nią (bez the.foldery svn!). Usuń wszystkie pliki, które nie były w dobrej kopii z folderów i z subversion, i zatwierdź to, co masz teraz.

 168
Author: joeytwiddle,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/doraprojects.net/template/agent.layouts/content.php on line 54
2009-05-02 09:43:51

Just use this line

Svn update-r yourOldRevesion

Możesz poznać aktualną wersję używając:

Svn info

 33
Author: M.Othman,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/doraprojects.net/template/agent.layouts/content.php on line 54
2017-12-12 20:03:24

Standardowy sposób użycia funkcji merge do cofnięcia całej odprawy działa świetnie, jeśli tego chcesz. Czasami jednak wszystko, co chcesz zrobić, to przywrócić pojedynczy plik. Nie ma na to legalnego sposobu, ale jest hack:

  1. znajdź żądaną wersję używając dziennika svn.
  2. Użyj polecenia eksportu svn:

    Svn export http://url-to-your-file@123 / tmp / filename

(gdzie 123 jest numerem wersji dla dobrej wersji plik.) Następnie przenieś lub skopiuj ten pojedynczy plik, aby zastąpić stary. Sprawdź w zmodyfikowanym pliku i gotowe.

 26
Author: Bill,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/doraprojects.net/template/agent.layouts/content.php on line 54
2009-07-02 20:39:44

A bit more old-school

svn diff -r 150:140 > ../r140.patch
patch -p0 < ../r140.patch

Wtedy zwykle

svn diff
svn commit
 8
Author: Yauhen Yakimovich,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/doraprojects.net/template/agent.layouts/content.php on line 54
2013-09-02 10:53:15

Myślę, że to jest najbardziej odpowiednie:

Wykonaj scalanie wstecz, na przykład, jeśli kod zawiera rewizję z rev 5612 do 5616, połącz je wstecz. U mnie działa.

Na przykład:

svn merge -r 5616:5612 https://<your_svn_repository>/

Zawierałby scalony kod z powrotem do poprzedniej wersji, a następnie można go zatwierdzić.

 5
Author: hpal,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/doraprojects.net/template/agent.layouts/content.php on line 54
2016-06-20 16:00:33

To jest to, co robiłem i pracowałem dla siebie.

Chcę cofnąć zmiany w wielu commitach, które zrobiłem przez określony czas i chcę przejść do poprzedniego punktu commitów.

  1. przejdź do Team - > Pokaż historię.
  2. Kliknij prawym przyciskiem myszy zakres wersji or, które chcesz zignorować.
  3. Wybierz opcję "Przywróć zmiany".

Spowoduje to odwrotne scalenie, cofając zmiany w kopii roboczej.

Wystarczy przejrzeć kod i zatwierdzić.

 3
Author: Ziya,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/doraprojects.net/template/agent.layouts/content.php on line 54
2014-02-28 20:08:13

Kliknij prawym przyciskiem myszy na najwyższej hierarchii, którą chcesz przywrócić > > Revert LUB Revert to Revision

 2
Author: Yuval Adam,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/doraprojects.net/template/agent.layouts/content.php on line 54
2009-05-02 08:40:04

Kliknij prawym przyciskiem myszy projekt > Zastąp przez > Revision lub URL > wybierz konkretną wersję, którą chcesz przywrócić.

Zatwierdź wersję lokalnego kodu aktualizacji do repozytorium. Spowoduje to przywrócenie bazy kodu do konkretnej wersji.

 1
Author: KayV,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/doraprojects.net/template/agent.layouts/content.php on line 54
2016-09-06 13:11:08

Większość poprzednich odpowiedzi używała odwrotnego scalania i zwykle jest to właściwa odpowiedź. Jest jednak jedna sytuacja (która właśnie mi się przydarzyła), w której jej nie ma.

Przypadkowo zmieniłem Plik z zakończeniami linii Uniksa na zakończenia linii DOS podczas dokonywania małej zmiany i zatwierdziłem go. Można to łatwo cofnąć, zmieniając zakończenia linii i zatwierdzając ponownie, lub przez odwrotne scalanie, ale ma to wpływ na to, że svn blame wyświetli moją edycję jako źródło każdej linii akta. (Co ciekawe, TortoiseSVN w systemie Windows nie ma na to wpływu; tylko wiersz poleceń svn blame.)

Jeśli chcesz zachować historię zgłoszoną przez svn blame, myślę, że musisz wykonać następujące czynności:

  • Usuń plik i zatwierdź.
  • w repozytorium skopiuj poprzednią dobrą kopię pliku do głowy i zatwierdź.
  • Przywróć wszystkie edycje, które chcesz zachować.

Usunięcie jest trochę przerażające, ale pamiętaj, że zawsze masz plik zapisany w repozytorium, więc jego przywrócenie to nic wielkiego. Oto kod do zilustrowania kroków. Załóżmy, że xxx jest numerem wersji ostatniej dobrej kopii.

svn rm svn+ssh://path/to/file
svn copy svn+ssh://path/to/file@xxx svn+ssh://path/to -m"Restore good copy"
svn update
<restore the edits>
svn commit -m"Restore edits"

Zauważ, że dla kopii w repozytorium, miejscem docelowym musi być Katalog, a nie nazwa pliku.

 1
Author: user2554330,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/doraprojects.net/template/agent.layouts/content.php on line 54
2017-05-24 12:48:18

Zsynchronizuj ze starszą wersją i zatwierdź ją. To powinno załatwić sprawę.

Oto również wyjaśnienie cofania zmian.

 0
Author: Mork0075,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/doraprojects.net/template/agent.layouts/content.php on line 54
2015-05-08 11:55:49

Odpowiedź Jona Skeeta jest rozwiązaniem w skrócie, jednak jeśli jesteś taki jak ja, możesz chcieć wyjaśnienia. Instrukcja Subversion nazywa to

Cherry-Pick Merge

Ze stron podręcznika.

  1. Ta forma nazywa się "cherry-pick": "- r N: M " odnosi się do różnicy w historii gałąź źródłowa między wersjami N i M.

    'Zakres wsteczny' może być używany do cofania zmian. Na przykład, gdy źródło i target odnoszą się do tej samej gałęzi, a wcześniej popełnione rewizję można cofnąć. W przedziale odwrotnym , N jest większe niż M w "- r N:M", lub opcja "- c "jest używana z liczbą ujemną: "- c-M" jest odpowiednikiem " - r M:". Znane jest również cofanie takich zmian jako wykonanie "odwrotnego scalania".


  • Jeśli źródłem jest plik, to różnice są stosowane do tego plik (przydatny do odwrotnego scalania wcześniejszych zmian). Inaczej, jeśli źródłem jest katalog, to domyślnym celem jest'.'.

    W normalnym użytkowaniu kopia robocza powinna być aktualna, na jednym rewizja, bez lokalnych modyfikacji i bez przełączanych podtypów.

Przykład:

svn merge -r 2983:289 path/to/file

Zastąpi to lokalną kopię [2983] (która, zgodnie z powyższym cytatem, powinna być zsynchronizowana z serwerem-twoja odpowiedzialność) z wersją 289 z serwera. Zmiana odbywa się lokalnie, co oznacza jeśli masz czystą kasę, zmiany można sprawdzić przed ich zatwierdzeniem.

 0
Author: Jonathan Komar,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/doraprojects.net/template/agent.layouts/content.php on line 54
2018-05-23 11:16:20

To działa dla mnie.

Miałem wiele lokalnych zmian i musiałem odrzucić te w lokalnej kopii i sprawdzić ostatnią stabilną wersję w SVN.

  1. Sprawdź status wszystkich plików, w tym plików ignorowanych.

  2. Grep wszystkie linie, aby uzyskać nowo dodane i ignorowane pliki.

  3. Zastąp je //.

  4. I rm-rf wszystkie linie.

    Svn status --no-ignore / grep' ^[?I] ' /sed "s / ^[?I]/|" / xargs-i {} rm-rf "{} "

 -1
Author: shah1988,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/doraprojects.net/template/agent.layouts/content.php on line 54
2017-12-12 20:28:19