SVN cofnij usunięcie przed zatwierdzeniem

135

Jeśli usuniesz katalog z kopii roboczej SVN, ale jeszcze nie zatwierdziłeś, nie jest oczywiste, jak go odzyskać. Google nawet sugeruje „svn cofnij, usuń przed zatwierdzeniem” jako typowe zapytanie po wpisaniu „svn cofnij d”, ale wyniki wyszukiwania nie są pomocne.

edycja: Chciałbym rozwiązanie, które działa w Subversion 1.4.4

Gumilaka
źródło
Czy istnieją katalogi równorzędne do tego, który usunąłeś, z oczekującymi zmianami? Jeśli tak, zachowaj ostrożność podczas powrotu z wyższego poziomu, możesz utracić zmiany.
Russell

Odpowiedzi:

145

svn revert deletedDirectory

Oto dokumentacja dla svn revertkomendy.


EDYTOWAĆ

Jeśli deletedDirectoryzostał usunięty za pomocą rmdiri nie svn rm, musisz to zrobić

svn update deletedDirectory

zamiast.

Michael Hackner
źródło
3
To musi być nowe, nie działa w SVN 1.4.4. (To była pierwsza rzecz, jaką próbowałem.)
LaC
4
Oto, co mówi 1.4.4, btw: $ svn help revert revert: Przywróć nieskazitelny plik kopii roboczej (cofnij większość lokalnych edycji). użycie: revert PATH ... Uwaga: ta komenda nie wymaga dostępu do sieci i rozwiązuje wszelkie konflikty. Jednak nie przywraca usuniętych katalogów.
LaC
1
1.6.6 ma ten sam tekst w pomocy, ale zadziałał, kiedy go testowałem. Zwróć uwagę, że jeśli nie svn deleteusuwałeś katalogu, ale zamiast tego usunąłeś go za pomocą rmdir, musisz svn update deletedDirectoryzamiast tego.
Michael Hackner
Usunąłem jeden plik (svn del) z lokalnego katalogu svn-ed. Aktualizacja svn nie działa, ale przywrócenie svn działa. Używałem SynchroSVN dla komputerów Mac. Jednak dzięki za wskazówki.
karim
5
Zgodnie z linkiem, użyj svn -R revert, aby przywrócić cały katalog z całą zawartością, co prawdopodobnie jest tym, czego chcesz. svn revert bez -R przywraca tylko katalog, a nie jego zawartość.
n13
156

1) zrobić

svn revert . --recursive

2) przeanalizuj dane wyjściowe pod kątem błędów, takich jak

"Failed to revert 'dir1/dir2' -- try updating instead."

3) wywołaj svn dla każdego z katalogów błędów:

svn up dir1/dir2
Denis Barmenkov
źródło
12
To jest najdokładniejsza odpowiedź, bardzo dziękuję, bardzo mi pomogłeś.
greenoldman
1
Tyle że to wszystko odwraca? Możesz tego nie chcieć.
n13
1
Ma to największy sens, jeśli masz cały folder, który według SVN został usunięty. Miałem to podczas sprawdzania kopii roboczej. Jeden folder już istniał, więc wystąpił konflikt i nie został wyewidencjonowany. To był link do innego folderu. Zmieniłem jego nazwę i próbowałem svn upgo wyewidencjonować, zdałem sobie sprawę z konfliktu, zrobiłem svn resolved fooi svn statuspowiedziałem, że mam około 10 000 plików oznaczonych jako D. svn upi svn revertnie odzyskałem ich, ale to rozwiązało problem.
simbabque
6
+1 za --recursiveco pomaga przywrócić zawartość usuniętych katalogów.
Melebius,
1
O mój Boże, uratowałeś mi wieczór!
ArturOlszak
32

Dla mnie zadziałało

svn revert --depth infinity deletedDir
Jason
źródło
To działało świetnie dla mnie (svn 1.7.10), gdzie svn revert deleteDir nie wykonał zadania. Doskonała odpowiedź.
rtome
4

Wykonaj (rekurencyjną) operację Cofnij z poziomu powyżej usuniętego katalogu.

Greg Hewgill
źródło
1
To zniweczy więcej zmian niż to konieczne.
Michael Hackner
To nie działa z Subversion 1.4.4 (właśnie to wypróbowałem). svn help revert mówi nawet, że „ta komenda nie wymaga dostępu do sieci i rozwiązuje wszelkie konflikty. Jednak nie przywraca usuniętych katalogów”. Przepraszam, powinienem był określić wersję. Wersja 1.4.4 jest zawarta w systemie Mac OS X 10.5.
LaC
4

Aby zrobić z niego jeden liner, możesz spróbować czegoś takiego:

svn status | cut -d ' ' -f 8 | xargs svn revert
Earle
źródło
Mogę utworzyć katalog ze spacjami w nazwie. Może złamać „cięcie” AFAIK.
Denis Barmenkov
1

Najprostszym rozwiązaniem, jakie udało mi się znaleźć, było usunięcie katalogu nadrzędnego z kopii roboczej (za pomocą rm -rf, a nie svn delete), a następnie uruchomienie aktualizacji svn w dziadku. Na przykład, jeśli usunąłeś a / b / c, rm -rf a / b, cd a, svn up. To wszystko przywraca. Oczywiście jest to dobre rozwiązanie tylko wtedy, gdy nie masz innych niezatwierdzonych zmian w katalogu nadrzędnym, które chcesz zachować.

Mam nadzieję, że następnym razem, gdy wyszukam w Google to pytanie, ta strona będzie na szczycie wyników. Byłoby jeszcze lepiej, gdyby ktoś oczywiście zasugerował czystszą metodę.

Gumilaka
źródło
To jest przy założeniu, że w katalogu nadrzędnym nie ma podkatalogów, które mają oczekujące zmiany.
Russell
0

Możesz usunąć folder i zaktualizować katalog nadrzędny przed zatwierdzeniem:

rm -r some_dir

svn update some_dir_parent

xinthose
źródło