Przypadkowo umieściłem zbyt wiele plików w repozytorium SVN i zmieniłem kilka rzeczy, których nie chciałem. (Wzdycha.) Najlepsze, co mogłem wymyślić, było przywrócenie ich do poprzedniego stanu
svn rm l3toks.dtx
svn copy -r 854 svn+ssh://<repository URL>/l3toks.dtx ./l3toks.dtx
Jezu! Czy nie ma lepszego sposobu? Dlaczego nie mogę po prostu napisać czegoś takiego:
svn revert -r 854 l3toks.dtx
OK, używam tylko wersji 1.4.4, ale przejrzałem listę zmian dla gałęzi 1.5 i nie widziałem nic bezpośrednio z tym związanego. Czy coś przegapiłem?
Edycja: Myślę, że nie byłem wystarczająco jasny. Nie sądzę, że chcę, aby odwrócić seryjnej, bo wtedy stracę zmiany, że zrobili chcesz zrobić! Powiedz to fileA
i fileB
oba zostały zmodyfikowane, ale chciałem tylko zatwierdzić fileA
; przypadkowe wpisanie
svn commit -m "small change"
zatwierdza oba pliki, a teraz chcę wycofać fileB
. Scalanie odwrotne sprawia, że to zadanie nie jest łatwiejsze (o ile wiem) niż kroki, które opisałem powyżej.
Odpowiedzi:
lub
Te dwa polecenia są równoważne .
źródło
svn merge -c -854 my.file
, a potem to zrobięsvn diff
, wydaje się, że pokazuje jedną wersję wcześniejszą niż 854 (czyli 853 ); tylko wtedy, gdy to zrobięsvm merge -c 854 myfile
(bez-
), wygląda na to, że mój plik jest przywrócony do rev 854. Jeszcze raz dziękuję, wiwaty!Sprawdź sekcję „ cofanie zmian ” w książce svn
źródło
przepraszam, że wykorzystuję trochę miejsca tylko na powtórzenie poprzedniej odpowiedzi - ale z tym zawsze mam kłopoty.
Powiedzmy, że zaktualizowałem lokalne pliki do najnowszej wersji, czyli 854. Następnie chciałbym uzyskać starszą wersję - wersję pliku z kilku wersji wcześniejszych, powiedzmy wersję 851.
Kopiowanie zadziała:
.. jednak nie przeszkadza mi szukanie adresu URL repozytorium :)
Aktualizacja pozornie może działać:
... jednak oznacza to również kopię lokalną jako „świeżo wyewidencjonowaną” lub raczej „taką samą jak wersja online” (np. w Tortoise / RabbitVCS dostajesz zielony znacznik OK) - co oznacza, że nie możesz tego zrobić
svn ci -m "rolled back to r 851"
: po prostu dlatego, że lokalnasubversion
plik wykonywalny nie zauważy żadnych lokalnych zmian i nie będzie przejmował się przesyłaniem czegokolwiek do repozytorium online.I, jak już odpowiedziałem, odwrotne scalanie działa - ale w tym przypadku nie należy polegać na składni skrótów; ale konkretnie określ:
Muszę przyznać - nigdy bym nie zrozumiał zdania " Odwrotne scalanie r854 do r852 do pliku ", które oznaczałoby " Właśnie dostałem r851 z twojego pliku i nadpisałem to, co miałeś wcześniej lokalnie - i jest oznaczone jako inne niż ostatnia wersja online, więc możesz to sprawdzić online jako nową wersję „ wycofania ”, ale myślę (i mam nadzieję :)) tak właśnie działa :)
Następnie można
svn diff
szybko sprawdzić, czy lokalnie otrzymaliśmy właściwą wersję; a także, plik zostanie oznaczony czerwonym wykrzyknikiem w Tortoise / RabbitVCS (to znaczy inaczej niż ostatnia zatwierdzona wersja), więcsvn ci -m "rolled back to r 851"
może zostać uruchomiony tym razem.Zwróć również uwagę, że jeśli w końcu zmienisz zdanie po scaleniu odwrotnym ( tj. I tak chcesz nadal pracować nad najnowszą wersją HEAD, tutaj 854 - po przywróceniu lokalnie do 851, ale jeszcze nie zatwierdziłeś wycofania ), nie powinieneś używać
svn up
, ponieważ po prostu powie, że jest już „ W wersji 854 ”; użyj zamiast tegosvn revert --recursive .
lub podobnego ...Twoje zdrowie!
Ref: Jak przywrócić zmiany za pomocą Subversion - Jacob Wright - Flex, AIR, PHP itp.
EDYCJA: ... i najwyraźniej dokładnie taki sam efekt
svn merge -r HEAD:851 l3toks.dtx
, jaki można osiągnąć za pomocą:źródło
--force
do nadpisania katalogów. Pamiętaj tylko, że nadpisze wszelkie zmiany.svn export
mógłbym skorzystać - czy coś mi brakuje, czy po prostu nie jest to zaimplementowane w tych GUI?Niedawno musiałem powrócić do określonej wersji, aby debugować starszą kompilację, a to działało jak magia:
Musiałem rozwiązać wszystkie konflikty za pomocą opcji "tc", ponieważ nie przejmowałem się lokalnymi zmianami (sprawdziłem wszystko, na czym mi zależało przed przywróceniem)
Powrót do głównej wersji również był prosty:
źródło
To, czego szukasz, nazywa się „odwrotnym scalaniem”. Powinieneś skonsultować się z dokumentacją dotyczącą funkcji scalania w książce SVN (jak wskazuje luapyad, a dokładniej pierwszy komentator tego postu). Jeśli używasz Tortoise, możesz również po prostu przejść do widoku dziennika, kliknąć prawym przyciskiem myszy i wybrać „Cofnij zmiany z tej wersji” na tej, w której popełnisz błąd.
źródło
Scalanie odwrotne jest dokładnie tym, czego chcesz (zobacz odpowiedź luapyada). Po prostu zastosuj scalenie do błędnie zatwierdzonego pliku zamiast do całego katalogu.
źródło
Jeśli chcesz cofnąć tylko ostatnie zameldowanie, możesz skorzystać z poniższych
W ten sposób nie musisz szukać aktualnych i poprzednich numerów wersji.
źródło
Scalanie svn spowoduje scalenie wersji, a nie ich przywrócenie. tzn. jeśli masz jakiś dodatek w swojej wersji HEAD, a następnie połącz go z poprzednią wersją, a zmiana będzie trwała.
Używam svn cat, a następnie przekierowuję go do pliku:
Następnie masz zawartość 851 w tym pliku i możesz ją ponownie wpisać.
źródło
Jeśli używasz Eclipse IDE z wtyczką SVN , możesz wykonać następujące czynności:
Spowoduje to przywrócenie plików do żądanej wersji. Pamiętaj tylko, że SVN potraktuje te zmiany jako nowe zatwierdzenie. Oznacza to, że zmiana otrzymuje nowy numer wersji i nie ma powiązania między starą wersją a nową. Powinieneś określić w komentarzach do zatwierdzenia, że przywracasz te pliki do określonej wersji.
źródło