Jak „przywrócić” usunięty folder w Subversion / TortoiseSVN?

96

Przypadkowo usunęliśmy folder „tags” z naszego repozytorium Subversion, w którym zamierzaliśmy usunąć tylko jeden określony tag. Jaki jest najłatwiejszy sposób na odzyskanie folderu „Tagi”?

Używamy TortoiseSVN jako naszego klienta i pomyślałem, że kiedy przejdę do przeglądarki repozytoriów i pokażę dziennik, będzie coś w stylu „cofnij zmiany z tej wersji”, podobnie jak to, co można zobaczyć w podobnym oknie dialogowym na kopii roboczej. Ale tam nie ma takiego polecenia ...

Borek Bernard
źródło

Odpowiedzi:

115

Po prostu skopiuj usunięty folder z powrotem z wcześniejszej wersji.

W przeglądarce repozytorium kliknij przycisk oznaczony HEAD (w prawym górnym rogu), aby wyświetlić wersję, w której twój folder nadal istnieje, a następnie kliknij prawym przyciskiem myszy ten folder i wybierz "Kopiuj do ..." i wprowadź tam ścieżkę chcesz, aby folder został ponownie utworzony (prawdopodobnie ta sama ścieżka, która jest już w polu tekstowym).

Mikael Sundberg
źródło
4
Świetna wskazówka, dzięki. Jeden TortoiseSVN złapał - w tym oknie dialogowym „kopiuj do ...” musiałem zmienić ścieżkę z „example.com/svn/tags” na „tags1”, a następnie z powrotem, aby przycisk OK został włączony.
Borek Bernard
2
Może to być dobre w przypadku tagów, ale nie należy tego robić w celu przywrócenia żadnego innego folderu, ponieważ utracisz historię
slckin
3
Zachowuje historię, po prostu to też robi.
acdcjunior
po prostu upewnij się, że odznaczysz "Zatrzymaj przy kopiowaniu / zmianie nazwy" podczas przeglądania dziennika, ponieważ w przeciwnym razie TortoiseSVN nie pokaże historii przed operacją przywracania (oczywiście) ...
Oli
Całkowicie zadziałało. Zaoszczędziłem dużo czasu. Dzięki :)
dgupta3091
78

dla entuzjastów wiersza poleceń:

  • najpierw znajdź numer wersji, w której nastąpiło usunięcie:

    svn log -v http://svnserver/path/to/folderContainingDeletedFolder
    

powiedz, że odkryłeś, że katalog został usunięty w wersji 999 (przy okazji: możesz łatwiej znaleźć numer wersji za pomocą przeglądarki repozytorium svn)

  • skopiuj folder z wersji minus 1

    svn copy http://svnserver/path/to/folderContainingDeletedFolder/deletedFolder@998 http://svnserver/path/to/folderContainingDeletedFolder/deletedFolder -m "undeleted folder"
    

voilà gotowe!

w twoim przypadku może to być:

    svn copy http://svnserver/project/tags@998 http://svnserver/project/tags -m "undeleted folder"
raudi
źródło
1
Dzięki… zaoszczędziłem dużo czasu
Dharani Kumar,
To właśnie uratowało mój bekon!
axiopisty
Chciałem tylko potwierdzić, że podejście „kopiowania svn” w rzeczywistości zachowuje całą historię, a dla folderów działa rekurencyjnie, przywracając folder i wszystkie elementy podrzędne.
WallStProg
11

Większość z tych odpowiedzi zadziała do pewnego stopnia, ale prawidłowa odpowiedź to odpowiedź Daniela. Wykonaj scalenie odwrotne. W ten sposób zachowujesz historię wersji.

svn merge -r R1:R2

gdzie R1 to wersja, w której się znajdujesz, a R2 to wersja zawierająca usunięty plik / folder.

Miles
źródło
1
W przypadku scalenia odwrotnego R1 powinno być wersją, którą chcesz przywrócić, a R2 jest wersją wcześniejszą.
arleslie
2
Nie tracisz historii z svn copy.
maxschlepzig
Dla tych z nas, którzy nie są entuzjastami linii poleceń, zobacz: tortoisesvn.net/docs/nightly/TortoiseSVN_en/…
Pascal
2
Czy to nie przywróci wszystkich usuniętych plików / folderów? Czy to zadziała, jeśli chcę przywrócić tylko jeden konkretny usunięty folder, ale nie inne usunięte foldery?
OJ7
8

Będziesz musiał wykonać scalenie odwrotne .

Aby uzyskać szczegółowe informacje o tym, jak to zrobić (i prawie wszystko, co kiedykolwiek chciałbyś lub musiałbyś zrobić z SVN), oficjalna książka jest dostępna online .

Daniel
źródło
3

Kontynuując odpowiedź Raudiego, która zadziałała dla mnie po tej rewizji.

Niektórzy klienci svn mogą potrzebować numeru wersji określonego za pomocą parametru -r wersja zamiast używania znaku @ po folderze w następujący sposób:

svn copy svn://svnserver/project/tags svn://svnserver/project/tags **-r 998** -m "undeleted folder"
Paweł
źródło
Jeśli przywracasz z folderu, który nadal istnieje -r <revision>, zadziała. Jeśli jednak próbujesz przywrócić folder bezpośrednio, musisz użyć @<revision>. W przeciwnym razie poinformuje Cię, że plik nie został znaleziony.
arleslie
2

Przejdź Repository Browserdo swojego repository, kliknij prawym przyciskiem myszy folder nadrzędny, w którym istniał usunięty folder . Teraz Show Logz folderu nadrzędnego i wybierz poprzednią wersję, w której zatwierdziłeś operację usuwania. Będziesz mieć listę i kliknij prawym przyciskiem myszy folder z informacji o wersji i wybierz Update to this Revision.

Skończyłeś

Abdul Munim
źródło
Och, widzę, to nie było w oknie dialogowym Pokaż dziennik, ale w głównym oknie przeglądarki repozytorium. Mimo to to polecenie spróbuje zaktualizować moją lokalną kopię roboczą, podczas gdy chciałbym rozwiązać ten problem bezpośrednio na serwerze (możesz sobie wyobrazić, że sprawdzanie setek tagów, z których każdy zawiera tysiące plików, nie jest dokładnie tym, co bym chciał do zrobienia).
Borek Bernard
U mnie to zadziałało. Opcja menu kontekstowego (po kliknięciu prawym przyciskiem myszy) to „Cofnij zmiany z tej wersji” i spowoduje odwrócenie scalenia zmian.
hsg