Jaki jest prawidłowy sposób przywrócenia usuniętego pliku z SVN?
Usunąłem Plik z repo i teraz chcę go umieścić z powrotem. Najlepsze co mogę wymyślić to:
- Aktualizacja do wersji przed usunięciem
- Skopiuj pliki gdzie indziej
- update to head
- Skopiuj pliki z powrotem
- dodaj je
- commit
To po prostu śmierdzi i traci całą historię do rozruchu. Musi być na to lepszy sposób. Zajrzałem już do księgi SVN ale nic nie znalazłem i teraz szukam na liście znaczników SVN.
9 answers
Użyj SVN merge:
svn merge -c -[rev num that deleted the file] http://<path to repository>
Więc przykład:
svn merge -c -12345 https://svn.mysite.com/svn/repo/project/trunk
^ The negative is important
Dla TortoiseSVN (chyba...)
- Kliknij prawym przyciskiem myszy w Eksploratorze, przejdź do TortoiseSVN - > Merge...
- upewnij się, że wybrano opcję" Połącz zakres wersji", kliknij Dalej
- w polu tekstowym" zakres zmian do scalenia " określ wersję, która usunęła plik
- zaznacz pole wyboru "odwrotne scalanie", kliknij Dalej
- Kliknij Merge
To jest zupełnie nieprzetestowane, jednak.
Edited by OP : to działa na mojej wersji TortoiseSVN (stary rodzaj bez następnego przycisku)
- przejdź do folderu, z którego zostały usunięte
- Kliknij prawym przyciskiem myszy w Eksploratorze, przejdź do TortoiseSVN - > Merge...
- w sekcji Z wpisz poprawkę, która usunęła
- w sekcji do wprowadź poprawkę przed usunięciem.
- kliknij "Połącz"
- commit
Sztuczka polega na merge backwards . Wyrazy uznania dla Seana.bright za wskazanie mnie we właściwym kierunku!
Edit: używamy różnych wersji. Metoda, którą opisałem doskonale współgrała z moją wersją TortoiseSVN.
Należy również zauważyć, że jeśli w zatwierdzeniu było wiele zmian, które odwrócisz scalanie, będziesz chciał przywrócić te inne zmiany, gdy scalenie zostanie wykonane przed zatwierdzeniem. Jeśli tego nie zrobisz, te dodatkowe zmiany również zostaną odwrócone.
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/doraprojects.net/template/agent.layouts/content.php on line 54
2009-01-29 06:12:25
Problem z wykonaniem scalenia svn, jak zasugerował Sean Bright, polega na ponownym wprowadzeniu innych zmian wprowadzonych w tej samej wersji co usunięcie. Kopia svn jest bardziej ukierunkowaną operacją, która będzie miała wpływ tylko na usunięte pliki.
Używając Tortoise SVN możesz wskrzesić plik, który został usunięty z katalogu working copy i z późniejszych wersji SVN, za pomocą kopii svn w następujący sposób:
- przejdź do folderu working copy, który wcześniej zawierał plik.
- Kliknij prawym przyciskiem myszy na folderze w Eksploratorze, przejdź do TortoiseSVN - > Show log.
- Kliknij prawym przyciskiem myszy numer wersji tuż przed wersją, która usunęła plik i wybierz "Przeglądaj repozytorium".
- Kliknij prawym przyciskiem myszy na usuniętym pliku i wybierz " Kopiuj do kopii roboczej..."i uratować.
Usunięty plik będzie teraz w folderze working copy. Aby ponownie dodać go do SVN, kliknij prawym przyciskiem myszy przywrócony plik i wybierz SVN Commit.
Uwaga: ta metoda zachowa poprzednia historia przywróconego Pliku, jednak aby zobaczyć poprzednią historię w Dzienniku TortoiseSVN, musisz upewnić się, że "Stop on copy/rename" nie jest zaznaczone w oknie dialogowym wiadomości dziennika.
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/doraprojects.net/template/agent.layouts/content.php on line 54
2009-09-20 22:46:20
Dla kompletności, to jest to, co byś znalazł w książce svn, gdybyś wiedział, czego szukać. To jest to co już odkryłeś:
Wskrzeszanie Usuniętych Elementów
To samo, z nowszej (i szczegółowej) wersji książki:
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/doraprojects.net/template/agent.layouts/content.php on line 54
2009-01-29 18:41:25
Użyj funkcji kopiowania SVN Tortoise, aby przywrócić wprowadzone zmiany:
- Kliknij prawym przyciskiem myszy folder nadrzędny, który zawiera usunięte pliki / folder
- Wybierz "Pokaż dziennik"
- Wybierz i kliknij prawym przyciskiem myszy na wersji, przed którą zmiany / usunięte zostały wykonane
- Wybierz "Przeglądaj repozytorium"
- Wybierz plik / folder, który ma zostać przywrócony i kliknij prawym przyciskiem myszy
- wybierz "Kopiuj do", który skopiuje pliki / foldery do głowicy revision
Hope that helps
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/doraprojects.net/template/agent.layouts/content.php on line 54
2010-10-12 14:28:46
Zawsze używam svn copy jako serwera, więc nie wiem, czy działa z dwoma ścieżkami roboczymi.
Oto przykład przywrócenia usuniętego pliku do lokalnej kopii roboczej projektu:
svn copy https://repos/project/modules/module.js@3502 modules/module.js
Będąc wewnątrz katalogu projektu. Działa to również przy przywracaniu całych katalogów.
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/doraprojects.net/template/agent.layouts/content.php on line 54
2012-09-17 10:59:07
Jeśli używasz Tortoise SVN, powinieneś być w stanie przywrócić zmiany z tej samej wersji do swojej kopii roboczej (skutecznie wykonując odwrotne scalanie), a następnie wykonać kolejny commit, aby ponownie dodać plik. Kroki do wykonania to:
- Przejdź do folderu w kopii roboczej, w którym został usunięty plik.
- Przejdź do repo-browser.
- Przejdź do wersji, w której usunięto plik.
- na liście zmian znajdź usunięty plik.
- Kliknij prawym przyciskiem myszy plik i przejdź do "Przywróć zmiany z tej wersji".
- spowoduje to przywrócenie pliku do kopii roboczej, zachowując historię.
- Zatwierdź plik, aby dodać go z powrotem do repozytorium.
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/doraprojects.net/template/agent.layouts/content.php on line 54
2009-01-30 01:07:28
Z Żółw SVN :
Jeśli nie zatwierdziłeś jeszcze zmian, możesz przywrócić folder nadrzędny, w którym usunąłeś plik lub katalog.
Jeśli już zatwierdziłeś usunięty plik, możesz użyć przeglądarki repozytorium, zmienić wersję, w której plik nadal istniał, a następnie użyć polecenia Kopiuj do... z menu kontekstowego. Wprowadź ścieżkę do kopii roboczej jako cel, a usunięty plik zostanie skopiowany z repozytorium do kopii roboczej.
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/doraprojects.net/template/agent.layouts/content.php on line 54
2009-01-29 05:09:11
Najprostszym sposobem, w jaki udało mi się przywrócić pliki i nie stracić historii wersji, jest użycie SVN copy , powyższy przykład scalania wydaje mi się bardziej złożonym sposobem osiągnięcia tego samego. Dlaczego istnieje potrzeba scalania, gdy po prostu chcesz przywrócić rewizję?
Używam następujących w tym przypadku i działa całkiem dobrze.
svn copy -m 'restoring file' -r <rev_number_file_to_restore> http://from/file.cs http://pathTo/file.cs
Zawsze używam svn copy
jako działania serwera, więc nie wiem, czy działa z dwoma ścieżkami roboczymi.
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/doraprojects.net/template/agent.layouts/content.php on line 54
2014-07-31 11:16:01
Powinieneś być w stanie po prostu sprawdzić jeden plik, który chcesz przywrócić. Spróbuj czegoś w rodzaju svn co svn://your_repos/path/to/file/you/want/to/restore@rev
gdzie rev
jest ostatnią wersją, w której istniał plik.
Musiałem zrobić dokładnie to jakiś czas temu i jeśli dobrze pamiętam, użycie opcji -r
do svn
nie zadziałało; musiałem użyć składni :rev
. (Chociaż mogłem zapamiętać to na odwrót...)
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/doraprojects.net/template/agent.layouts/content.php on line 54
2009-01-29 05:02:37