2009-12-18 11 views
66

Moje repozytorium SVN było doskonałe w wersji 497. Wykonałem kilka złych zatwierdzeń, więc teraz jest to w wersji HEAD. Widzę, że do wycofania należy użyć polecenia tak:SVN reverse fge?

svn merge -r HEAD:497 . 

natomiast w katalogu roboczym (i katalogu roboczego jest w wersji HEAD). Ale czy to właściwe polecenie? Czy mogę użyć HEAD: 498? lub 496? Uruchomiłem już tę komendę, a bieżąca wersja nie wydaje się być taka sama jak 497, ponieważ kiedy aktualizuję -r 497 (lub gdy mam 497 kopii roboczej i aktualizuję -r HEAD), występuje wiele aktualizacji plików .

Czy mam jakiś problem z ogrodzeniem, gdzie GŁOWA: 497 wraca do 496, czy coś w tym stylu? A może po aktualizacji SVN powraca do każdej wersji, mimo że HEAD i 497 są identyczne?

Edit:

Wystarczy, aby wyjaśnić, jak powiedziałem wcześniej, kiedy aktualizować między 497 a moim połączonego HEAD, widzę wiele zmian plików odbyć. Myślałem, że jeśli 497 i HEAD są identyczne, wykryłoby to i żadne zmiany plików nie wystąpiłyby; po prostu powie: "Zaktualizowano do wersji 497". Czy moje polecenie jest błędne, czy też jest to błędne myślenie? (? A jeśli tak, to dlaczego)

+0

To faktycznie wykona scalenia w odwrotnej kolejności i może to być niektóre/większość/wszystkie pliki kończą się w stanie początkowym. –

Odpowiedz

68

Jeśli repo był w nienaruszonym stanie przy rewizji 497, to myślę, że masz poprawne, trzeba zrobić:

svn merge -r HEAD:497 . 

które łączą polecenie zmieni tylko pliki w kopii roboczej, więc pamiętać, aby również zobowiązać zmiany do aktualizacji HEAD w repozytorium.

Po wykonaniu scalenia, a następnie zatwierdzeniu, należy spróbować porównać wersję 497 do HEAD i powinny one być identyczne.

+0

Jaki jest najprostszy sposób porównania 497 i HEAD? To jest ogromne repozytorium, a samo polecenie scalenia zajmuje 20-30 minut; czy istnieje polecenie, które może działać po stronie serwera i po prostu powiedz mi, czy są one identyczne, czy też muszę wprowadzić dwie wersje do dwóch oddzielnych folderów i zrobić różnicę? – Ricket

+0

Zwykle używam subklipu eclipse do porównania, i jestem pewien, że działa on za wersjami polecenia 'svn diff' za kulisami i, jak powiedziałeś, nawet z repozytorium o małej średniej wielkości, może to potrwać długo. czas na porównanie. Zazwyczaj przeglądam dziennik, aby sprawdzić, czy przywrócenie i/lub scalenie przebiegło zgodnie z oczekiwaniami. Oto link do więcej informacji na temat svn diff: http://svnbook.red-bean.com/en/1.4/svn-book.html#svn.tour.history.diff.wcrepos – Upgradingdave

+0

OK, powiodło mi się . Ponieważ po raz pierwszy nie zadziałało, tym razem wykonałem HEAD: 496, a następnie 496: 497, a następnie zatwierdzono. Interesujące, po zatwierdzeniu nadal uważałem, że jestem w r507, więc musiałem zaktualizować svn, aby stać się r508 (co właśnie popełniło); aktualizacja oczywiście nie zrobiła nic. Następnie użyłem svn diff, podając dwa URL-e, i najwyraźniej zrobiłem różnicę po stronie serwera, ponieważ szybko zwrócono pusty ekran. Różnica testowa z inną wersją potwierdziła, że ​​pusty jest dobry; w końcu te same poprawki. :) – Ricket

21

Jeśli chcesz cofnąć R-123, trzeba svn merge -r 123:122 .

Oznacza to trzeba uruchomić

svn merge -r HEAD:497 . 

Aby zweryfikować przebieg:

svn diff -r 497 
1

Aby wycofać się z niepożądanej zmiany (być może popełnił inne pliki, które debugowania oświadczeń w nich, a także coś, czego naprawdę nie chcą popełnić), twierdzą, że złe zmiana była -R10:

svn update 
svn merge -r10:9 <URL of your repository base> . 

teraz można przywrócić tylko plik nie chcą popełnić:

svn update 
svn update -r10 
svn commit <just that one file> # this is the command you meant to type from the beginning 
0

Jeśli chcesz szybki i niezawodny sposób przywrócić do określonej wersji, to po prostu sprawdź starszą wersję repozytorium.

Run svn info aby przypomnieć sobie co repozytorium URL, a następnie utworzyć nowy folder i kasy rewizji chcesz:

cd <your new folder> 
svn checkout <URL> -r 497 . 

Następnie można Diff tego folderu przeciwko istniejącym folderze, można popełnić że całą wersję z powrotem do repozytorium, jeśli zajdzie taka potrzeba.

0

Rozważmy główki: 150 przywrócić r1 = 100 i R2 = 90

  1. svn się
  2. svn połączyć -r 100: 99
  3. svn merge -r 90:89

Uwaga: Zmiany te nie powróci folderu pozory!