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.

Author: leander, 2009-01-29

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.

 51
Author: Sean Bright,
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.

 161
Author: tekumara,
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ś:

Cofanie Zmian

Wskrzeszanie Usuniętych Elementów

To samo, z nowszej (i szczegółowej) wersji książki:

Cofanie Zmian

Wskrzeszanie Usuniętych Elementów

 25
Author: gbarry,
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:

  1. Kliknij prawym przyciskiem myszy folder nadrzędny, który zawiera usunięte pliki / folder
  2. Wybierz "Pokaż dziennik"
  3. Wybierz i kliknij prawym przyciskiem myszy na wersji, przed którą zmiany / usunięte zostały wykonane
  4. Wybierz "Przeglądaj repozytorium"
  5. Wybierz plik / folder, który ma zostać przywrócony i kliknij prawym przyciskiem myszy
  6. wybierz "Kopiuj do", który skopiuje pliki / foldery do głowicy revision

Hope that helps

 15
Author: Mukul Joshi,
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.

 11
Author: NullPoiиteя,
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:

  1. Przejdź do folderu w kopii roboczej, w którym został usunięty plik.
  2. Przejdź do repo-browser.
  3. Przejdź do wersji, w której usunięto plik.
  4. na liście zmian znajdź usunięty plik.
  5. Kliknij prawym przyciskiem myszy plik i przejdź do "Przywróć zmiany z tej wersji".
  6. spowoduje to przywrócenie pliku do kopii roboczej, zachowując historię.
  7. Zatwierdź plik, aby dodać go z powrotem do repozytorium.
 5
Author: davogones,
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.

 4
Author: VonC,
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.

 4
Author: Daniel Honig,
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...)

 0
Author: David Z,
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