Zaktualizuj element do wersji vs Przywróć do wersji

161

Zacząłem używać Subversion z TortoiseSVN. Jeśli otworzę dziennik i kliknę prawym przyciskiem myszy starą wersję, zobaczę dwie opcje, które brzmią, jakby przywracały starszą wersję: „Zaktualizuj element do wersji” i „Przywróć tę wersję”.

Rozumiem, że aktualizacja do starszej wersji jest używana, gdy chcesz tylko spojrzeć wstecz na starą wersję, ale tak naprawdę nie chcesz zmieniać repozytorium. Przywróć jest wtedy, gdy faktycznie coś schrzaniłeś i chcesz, aby najnowsza wersja w repozytorium była taka sama, jak starsza wersja.

Powiedzmy, że wersja HEAD to 100, a ja powrócę do 95. To odwróci scalenie mojej kopii roboczej z powrotem do 95. Wtedy mogę zatwierdzić tę zmianę do repozytorium, które utworzy poprawną wersję 101? Czym się to różni, gdybym zaktualizował z powrotem do wersji 95? Czy nadal nie odwraca zmian z ostatnich wersji? Nie mam pojęcia, jak stan mojej kopii roboczej różni się po przywróceniu lub zaktualizowaniu do starszej wersji.

Eric Anastas
źródło

Odpowiedzi:

205

Aktualizacja do wersji spowoduje zaktualizowanie plików kopii roboczej tylko do wybranej wersji. Nie możesz jednak kontynuować pracy nad tą wersją, ponieważ SVN będzie narzekać, że kopia robocza jest nieaktualna .

przywrócenie tej wersji spowoduje cofnięcie wszystkich zmian w kopii roboczej, które zostały wprowadzone po wybranej wersji (w przykładowej wersji 96,97,98,99,100) Twoja kopia robocza jest teraz w zmodyfikowanym stanie .

Zawartość pliku w obu scenariuszach jest taka sama, jednak w pierwszym przypadku masz niezmodyfikowaną kopię roboczą i nie możesz zatwierdzić zmian (ponieważ kopia robocza nie wskazuje na HEAD rev 100) w drugim przypadku masz zmodyfikowaną kopię roboczą wskazującą na głowę i możesz dalej pracować i angażować się

Peter Parker
źródło
1
OK, więc powiedz, że aktualizuję do wersji, a w kopii roboczej nie ma danych. Nic nie powstrzymuje mnie przed zmianą plików. Co jeśli zmienię jeden z plików i spróbuję go zatwierdzić. Domyślam się, że Subversion zobaczy konflikt i zmusi mnie do scalenia najnowszej wersji z repozytorium z moją zmodyfikowaną kopią roboczą przed jej przesłaniem.
Eric Anastas
5
Jeśli spróbujesz zatwierdzić element ze starszą wersją BASE niż HEAD, otrzymasz komunikat „zatwierdzenie nie powiodło się: Twoja kopia robocza jest prawdopodobnie nieaktualna”
Peter Parker
jak wykonywać update toi revert to/fromtraktować zmiany lokalne (niezatwierdzone zmiany)?
BaltoStar,
Obie metody zachowują zmiany lokalne w stanie nienaruszonym, jednak zmiany lokalne mogą powodować konflikty w obu przypadkach, aw przypadku cofnięcia modyfikacje z wycofania są mieszane ze zmianami lokalnymi wszystkich innych użytkowników. Więc przynajmniej zapisz łatkę swoich modyfikacji lub zapisz do gałęzi.
Peter Parker,
31

Aby zrozumieć, w jaki sposób stan kopii roboczej różni się w obu scenariuszach, musisz zrozumieć koncepcję wersji BASE :

BAZA

Numer wersji pozycji w kopii roboczej. Jeśli element został zmodyfikowany lokalnie, odnosi się to do sposobu, w jaki element wygląda bez tych lokalnych modyfikacji.

Twoja kopia robocza zawiera migawkę każdego pliku (ukrytego w folderze .svn) w tej wersji BASE, co oznacza, że był on ostatnio pobierany z repozytorium . To wyjaśnia, dlaczego kopie robocze zajmują 2x więcej miejsca i jak to jest możliwe, że możesz sprawdzić, a nawet cofnąć lokalne modyfikacje bez połączenia sieciowego.

Zaktualizuj element do wersji zmienia tę wersję podstawową, sprawiając, że BASE jest nieaktualny. Kiedy spróbujesz wprowadzić lokalne modyfikacje, SVN zauważy, że twoja BASE nie pasuje do repozytorium HEAD. Zatwierdzenie zostanie odrzucone, dopóki nie wykonasz aktualizacji (i prawdopodobnie scalenia), aby to naprawić.

Powrót do wersji nie zmienia BASE. Koncepcyjnie jest prawie to samo, co ręczna edycja pliku w celu dopasowania do wcześniejszej wersji.

Wim Coenen
źródło
Z zaakceptowanej odpowiedzi „Zawartość pliku w obu scenariuszach jest taka sama”. Więc po co się przejmować? Ta odpowiedź wyjaśnia ostateczną różnicę i wyjaśnia, dlaczego „aktualizacja” w porównaniu z „odwróceniem” powoduje inne zachowanie podczas próby zatwierdzenia.
radarbob
jak wykonywać update toi revert to/fromtraktować zmiany lokalne (niezatwierdzone zmiany)?
BaltoStar,
5

Pliki w kopii roboczej mogą wyglądać dokładnie tak samo, ale nadal są to bardzo różne akcje - repozytorium jest w zupełnie innym stanie i będziesz mieć inne opcje dostępne po przywróceniu niż "aktualizacja" do starej wersji .

Krótko mówiąc, „aktualizacja do” wpływa tylko na kopię roboczą, ale „odwrotne scalanie i zatwierdzanie” wpłynie na repozytorium.

Jeśli „zaktualizujesz” do starej wersji, repozytorium się nie zmieniło: w twoim przykładzie wersja HEAD nadal wynosi 100. Nie musisz niczego zatwierdzać, ponieważ po prostu majstrujesz przy kopii roboczej. Jeśli dokonasz modyfikacji w swojej kopii roboczej i spróbujesz zatwierdzić, zostaniesz poinformowany, że twoja kopia robocza jest nieaktualna i będziesz musiał ją zaktualizować, zanim będziesz mógł zatwierdzić. Jeśli ktoś inny pracujący na tym samym repozytorium dokona „aktualizacji” lub jeśli wyewidencjonujesz drugą kopię roboczą, będzie to r100.

Jeśli jednak dokonasz „scalenia wstecznego” ze starą wersją, to twoja kopia robocza nadal będzie oparta na HEAD (zakładając, że jesteś na bieżąco) - ale tworzysz nową wersję, aby zastąpić niechciane zmiany. Musisz zatwierdzić te zmiany, ponieważ zmieniasz repozytorium. Po zakończeniu wszelkie aktualizacje lub nowe kopie robocze oparte na HEAD pokażą r101 z treścią, którą właśnie zatwierdziłeś.

Zac Thompson
źródło
5

Zaktualizuj kopię roboczą do wybranej wersji. Przydatne, jeśli chcesz, aby twoja kopia robocza odzwierciedlała czas z przeszłości lub jeśli były dalsze zatwierdzenia do repozytorium i chcesz aktualizować swoją kopię roboczą krok po kroku. Najlepiej zaktualizować cały katalog w kopii roboczej, a nie tylko jeden plik, w przeciwnym razie kopia robocza może być niespójna. Służy do testowania określonego celu obrotów, jeśli twój test zakończył się, możesz użyć tego polecenia, aby przetestować inny obrót lub użyć aktualizacji SVN, aby uzyskać HEAD

Jeśli chcesz cofnąć na stałe wcześniejszą zmianę, użyj Przywróć tę wersję .

- z dokumentu pomocy TSVN

Jeśli zaktualizujesz swoją kopię roboczą do wcześniejszej wersji, wpłynie to tylko na twoją własną kopię roboczą, po wprowadzeniu pewnych zmian i zechcieć zatwierdzić, nie powiedzie się, TSVN ostrzeże Cię, aby najpierw zaktualizować WC do najnowszej wersji. do rewizji można zatwierdzić do repozytorium. wszyscy wrócą do rewizji po wykonaniu aktualizacji.

prime23
źródło
2

Tekst z odniesienia do Żółwia:

Aktualizuj element do wersji Zaktualizuj kopię roboczą do wybranej wersji. Przydatne, jeśli chcesz, aby twoja kopia robocza odzwierciedlała czas z przeszłości lub jeśli były dalsze zatwierdzenia do repozytorium i chcesz aktualizować swoją kopię roboczą krok po kroku. Najlepiej zaktualizować cały katalog w kopii roboczej, a nie tylko jeden plik, w przeciwnym razie kopia robocza może być niespójna.

Jeśli chcesz trwale cofnąć wcześniejszą zmianę, użyj opcji Przywróć tę wersję.

Przywróć tę wersję Przywróć wcześniejszą wersję. Jeśli wprowadziłeś kilka zmian, a następnie zdecydujesz, że naprawdę chcesz wrócić do stanu rzeczy w wersji N, to jest to polecenie, którego potrzebujesz. Zmiany w kopii roboczej zostaną cofnięte, więc ta operacja nie wpłynie na repozytorium, dopóki nie zatwierdzisz zmian. Zwróć uwagę, że spowoduje to cofnięcie wszystkich zmian dokonanych po wybranej wersji i zastąpienie pliku / folderu wcześniejszą wersją.

Jeśli kopia robocza jest w stanie niezmodyfikowanym, po wykonaniu tej czynności kopia robocza zostanie wyświetlona jako zmodyfikowana. Jeśli masz już zmiany lokalne, to polecenie scali cofnięte zmiany z kopią roboczą.

To, co dzieje się wewnętrznie, polega na tym, że Subversion wykonuje odwrotne scalenie wszystkich zmian dokonanych po wybranej wersji, cofając efekt tych poprzednich zatwierdzeń.

Jeśli po wykonaniu tej akcji zdecydujesz, że chcesz cofnąć cofnięcie i przywrócić kopię roboczą z powrotem do jej poprzedniego niezmodyfikowanego stanu, powinieneś użyć TortoiseSVN → Przywróć z poziomu Eksploratora Windows, który odrzuci lokalne modyfikacje dokonane przez tę akcję odwrotnego scalania.

Jeśli chcesz po prostu zobaczyć, jak plik lub folder wyglądał we wcześniejszej wersji, użyj opcji Aktualizuj do wersji lub Zapisz wersję jako….

Liker777
źródło