Pracuję nad projektem z przyjacielem i chcę wrócić do starszej wersji naszego kodu i ustawić go jako bieżący. Jak mam to zrobić?
Używam „anksvn” na vs08.
Mam wersję, którą chcę na komputerze, ale zatwierdzenie nie powiedzie się; Otrzymuję komunikat „zatwierdzenie nie powiodło się, plik lub katalog jest nieaktualny”.
Mam również klienta subversion na moim komputerze.
svn merge -r HEAD:140
.Można popełnić tylko nowe zmiany na głowie historii Subversion.
Powodem, dla którego nie możesz nic zrobić bezpośrednio z dobrą kopią, którą masz na komputerze, jest to, że jego
.svn
foldery wiedzą, że jest to kod z przeszłości, dlatego wymaga aktualizacji przed zatwierdzeniem.Znajdź dobry numer wersji i cofnij
Znajdź numer wersji starej kopii, którą chcesz.
Uzyskaj swoją aktualną wersję dzięki:
Lub, aby sprawdzić starsze wersje swojego projektu, użyj:
aż znajdziesz odpowiedni numer wersji.
Zanotuj dobry numer wersji (zakładając
123
przykłady poniżej).Zaktualizuj do najnowszej wersji:
Cofnij wszystkie zmiany między żądaną wersją a najnowszą wersją:
(to samo co powyżej odpowiedź Jona Skeeta).
Jeśli nie możesz znaleźć numeru wersji
Jeśli nie możesz znaleźć starej kopii, a chcesz po prostu zatwierdzić pliki na komputerze:
Zrób kopię dobrej wersji (ale bez
.svn
folderów):Teraz upewnij się, że masz najnowszą wersję:
Skopiuj dobrą wersję na kopię kopii roboczej.
To polecenie skopiuje, a także usunie wszystkie pliki z drzewa roboczego, których nie ma w dobrej kopii, ale nie wpłynie to na istniejące
.svn
foldery.Jeśli nie masz rsync, możesz go użyć,
cp -a
ale będziesz musiał również ręcznie usunąć niechciane pliki.Powinieneś być w stanie dokonać tego, co masz teraz.
źródło
Po prostu użyj tej linii
Możesz poznać swoją aktualną wersję, używając:
źródło
Standardowy sposób użycia scalania do cofnięcia całego odprawy działa świetnie, jeśli tego właśnie chcesz. Czasami wszystko, co chcesz zrobić, to przywrócić pojedynczy plik. Nie ma uzasadnionego sposobu, aby to zrobić, ale istnieje hack:
Użyj komendy eksportu svn:
svn export http: // url-to-your-file @ 123 / tmp / filename
(Gdzie 123 to numer wersji dobrej wersji pliku.) Następnie przenieś lub skopiuj ten pojedynczy plik, aby zastąpić stary. Sprawdź zmodyfikowany plik i gotowe.
źródło
svn
?svn cat -r 123 path-in-your-working-copy > path-in-your-working-copy
Trochę więcej starej szkoły
wtedy zwykłe
źródło
Myślę, że to najbardziej pasuje:
Wykonaj scalanie wstecz, na przykład, jeśli zatwierdzony kod zawiera wersję od wersji 5612 do 5616, po prostu scal ją wstecz. To działa na moim końcu.
Na przykład:
Zawierałby scalony kod z powrotem do poprzedniej wersji, a następnie można go zatwierdzić.
źródło
To właśnie zrobiłem i pracowałem dla siebie.
Chcę cofnąć zmiany w wielu zatwierdzeniach, które zrobiłem dla określonych czasów i chcę przejść do poprzedniego punktu zatwierdzenia.
Spowoduje to uruchomienie scalania wstecznego, cofając zmiany w kopii roboczej.
Wystarczy przejrzeć kod i zatwierdzić.
źródło
Kliknij prawym przyciskiem myszy najwyższą hierarchię, którą chcesz przywrócić >>
Revert
lubRevert to Revision
źródło
Większość poprzednich odpowiedzi używała scalania zwrotnego, i to zwykle jest poprawna odpowiedź. Jest jednak jedna sytuacja (która właśnie mi się przydarzyła), w której jej nie ma.
Podczas niewielkiej zmiany przypadkowo zmieniłem plik z zakończeniami linii uniksowej na zakończenia linii DOS i zatwierdziłem go. Można to łatwo cofnąć, zmieniając zakończenia linii i zatwierdzając ponownie, lub scalając wstecz, ale powoduje to, że
svn blame
lista staje się moją edycją jako źródło każdej linii pliku. (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:Usunięcie jest trochę przerażające, ale pamiętaj, że zawsze masz plik zapisany w repozytorium, więc przywrócenie go nie jest wielkim problemem. Oto kod ilustrujący poszczególne kroki. Załóżmy, że
xxx
jest to numer wersji ostatniej dobrej kopii.Pamiętaj, że dla kopii w repozytorium miejscem docelowym musi być katalog, a nie nazwa pliku.
źródło
Kliknij projekt prawym przyciskiem myszy> Zamień na> Wersja lub URL> Wybierz konkretną wersję, którą chcesz wycofać.
Teraz zatwierdz lokalną wersję kodu aktualizacji do repozytorium. Spowoduje to przywrócenie podstawy kodu do konkretnej wersji.
źródło
Na tej stronie znajduje się wiele niebezpiecznych odpowiedzi. Zauważ, że od wersji SVN 1.6 robienie aktualizacji -r może powodować konflikty drzew, które szybko przeradzają się w potencjalnie tracący dane koszmar kafkeresque, w którym poszukujesz informacji o konfliktach drzew.
Prawidłowy sposób powrotu do wersji to:
Gdzie 12345 to numer wersji. Nie zapomnij kropki.
źródło
Zsynchronizuj ze starszą wersją i zatwierdź ją. To powinno załatwić sprawę.
Oto także wyjaśnienie cofania zmian.
źródło
Odpowiedź Jona Skeeta jest w skrócie rozwiązaniem, ale jeśli jesteś podobny do mnie, możesz chcieć wyjaśnienia. Podręcznik Subversion nazywa to a
Połącz Cherry-Pick
Ze stron podręcznika.
Przykład:
Zastąpi to lokalną kopię [2983] (która, zgodnie z cytatem powyżej, powinna być zsynchronizowana z serwerem - twoja odpowiedzialność) z wersją 289 z serwera. Zmiana następuje lokalnie, co oznacza, że jeśli masz czystą kasę, zmiany można sprawdzić przed ich zatwierdzeniem.
źródło
Poniższe działało dla mnie.
Miałem wiele lokalnych zmian i musiałem odrzucić te z lokalnej kopii i pobrać ostatnią stabilną wersję w SVN.
Sprawdź status wszystkich plików, w tym plików ignorowanych.
Przeciągnij wszystkie linie, aby uzyskać nowo dodane i zignorowane pliki.
Zamień je na
//
.i rm -rf wszystkie linie.
status svn --no-ignore | grep '^ [? I]' | sed "s / ^ [? I] //" | xargs -I {} rm -rf "{}"
źródło