Mam plik pokazany poniżej w repozytorium SVN, który chciałbym przywrócić do poprzedniej wersji. Jak to zrobić w SVN? Chcę tylko zmienić ten konkretny plik na starszą wersję, a nie całe repozytorium.
Dzięki.
$ svn log myfile.py
----------------------
r179 | xx | 2010-05-10
Change 3
----------------------
r175 | xx | 2010-05-08
Change 2
----------------------
r174 | xx | 2010-05-04
Initial
Odpowiedzi:
Jeśli chcesz tylko stary plik w kopii roboczej:
Jeśli chcesz wycofać, zobacz to „ Jak powrócić do starszej wersji naszego kodu w wersji subversion? ”.
źródło
svn cat ma również wersję arg!
svn cat -r 175 mydir/myfile > mydir/myfile
źródło
powinno to przywrócić pojedynczy plik.
źródło
W przypadku pojedynczego pliku możesz wykonać:
svn export -r <REV> svn://host/path/to/file/on/repos file.ext
Możesz to zrobić,
svn revert <file>
ale przywróci to tylko ostatnią kopię roboczą.źródło
Jak dotąd wszystkie odpowiedzi tutaj wydają się mieć znaczące wady, są skomplikowane (trzeba znaleźć identyfikator URI repo) lub nie robią tego, o co prawdopodobnie pytało pytanie: Jak przywrócić Repo do stanu roboczego dzięki tej starszej wersji plik .
svn merge -r head:[revision-number-to-revert-to] [file-path]
jest IMO najczystszym i najprostszym sposobem na zrobienie tego. Pamiętaj, że przywracanie usuniętego pliku nie działa w ten sposób [1]. Zobacz także następujące pytanie: Lepszy sposób na przywrócenie poprzedniej wersji pliku SVN?[1] W tym celu
svn cp -r [rev-number] [repo-URI/file-path]@[rev-number] [repo-URI/file-path] && svn up
zobacz także Jaki jest prawidłowy sposób przywrócenia usuniętego pliku z SVN?źródło
svn merge
z jakiegoś powodu nie przyjmuje wielu plików jako argumentu. W tym przypadku wydaje się, że nic nie robi (bez komunikatu o błędzie).Najlepszym sposobem jest:
Spowoduje to cofnięcie wszystkich plików wersji niż po prostu przywrócenie plików, których nie chcesz cofać. Nie zapomnij o myślniku (
-
) jako prefiksie zmiany.Teraz wprowadź zmiany z powrotem.
źródło
Chcesz robić
svn merge -r [revision to revert from]:[revision to revert to] [path/filename]
Gdy to zrobisz, będziesz mieć tę wersję pliku w stanie do zatwierdzenia. Zatwierdź plik.
źródło
Odkryłem, że łatwo jest to zrobić za pomocą
svn cat
polecenia, abyś nawet nie musiał określać wersji.Prawdopodobnie nie spowoduje to przywrócenia danych i-węzłów (metadanych), takich jak znaczniki czasu.
źródło
zaskoczony, nikt o tym nie wspominał
bez znalezienia numeru wersji możesz to napisać, jeśli popełniłeś coś, co chcesz przywrócić, to nie zadziała, jeśli zmieniłeś jakiś inny plik, a plik docelowy nie jest plikiem ostatnio zmienionym
źródło
svn merge -r HEAD:PREV file
tak, jak powiedział @Nick RussoJeśli to tylko kilka plików i jeśli używasz Tortoise SVN, możesz zastosować następujące podejście:
źródło
Po prostu dodałem odpowiedź @Mitch Dempsy, ponieważ nie mam jeszcze wystarczającej liczby przedstawicieli, aby móc komentować.
Dodanie opcji --force spowoduje zastąpienie lokalnej kopii eksportem, a następnie możesz wykonać polecenie svn, aby wypchnąć ją do repozytorium.
źródło
Alternatywną opcją dla pojedynczego pliku jest „zastąpienie” bieżącej wersji pliku starszą wersją:
Ma to dodatkową funkcję, że niepożądane zmiany nie pojawiają się w dzienniku dla tego pliku (tj. Svn log file.ext).
źródło
Jeśli chcesz wycofać pojedynczy plik z konkretnej wersji i móc zatwierdzić, wykonaj następujące czynności:
svn merge -c - [OldRev #] [Nazwa pliku]
to znaczy.
svn merge -c -150 myfile.py
Zwróć uwagę na ujemny numer wersji
źródło
źródło