Udało mi się dziś rano strzelić sobie w stopę, wykonując następujące czynności:
- Rozpocząłem pracę nad zmianą w moim projekcie
- Wprowadzono kilka zmian w kilku plikach
- Zrozumiałem, że moje podejście było błędne i że muszę zacząć od nowa
- cd do najwyższego poziomu mojego projektu i wykonałem "svn --recursive revert". aby przywrócić moją lokalną piaskownicę do stanu sprzed zmian.
- Zawył z przerażenia, gdy zdałem sobie sprawę, że w mojej lokalnej piaskownicy pojawiło się wiele innych zmian i właśnie je wszystkie wymazałem. (serwer svn nie działał w zeszły piątek, więc nie mogłem ich sprawdzić i zapomniałem o nich w weekend)
Na szczęście w tym przypadku wykonałem „svn diff> temp.txt” przed wyjściem z pracy w piątek, a plik temp.txt wciąż był na moim dysku twardym, więc mogłem wprowadzić ten plik do „łaty” i odzyskać utracone zmiany.
Ale na przyszłość (tj. Następnym razem, gdy popełnię ten sam głupi błąd) ... czy jest jakiś sposób, aby nakazać svn cofnąć „powrót svn”? Czy svn zachowuje gdziekolwiek kopię zapasową lokalnych / niezaznaczonych różnic?
Odpowiedzi:
Nie, (absolutnie) NIE .
Jeśli powiesz, że Subversion powinno cofnąć plik, wszystkie zmiany znikną.
Tylko twoja pamięć może je odzyskać.
Wyjątek: nowe pliki, które dodałeś, stracą tylko status „dodane”, ale plik pozostanie w tym katalogu, tylko status jest nieznany („?”)
Wyjątek platformy / oprogramowania: Używając TortoiseSVN w systemie Windows, Przywróć najpierw wrzuca pliki do Kosza, a następnie przywraca je. Możesz kopać do Kosza, aby odzyskać pliki.
źródło
Jest rozwiązanie ... przejdź do kosza, znajdziesz tam najnowszą wersję usuniętego pliku. Żółw „wyrzuca” do kosza każdy przywrócony plik.
źródło
Niezupełnie specyficzne dla Subversion, ale jeśli pracujesz z Eclipse, możesz spróbować szczęścia w lokalnej historii.
Teraz coś bardziej specyficznego dla Subversion: jeśli nie chcesz tworzyć gałęzi dla każdej wprowadzanej zmiany, możesz wyewidencjonować kilka linii trunk lokalnie (trunk-modif-1, trunk-modif-2 .. .). Każda „modyfikacja” jest wykonywana na osobnym drzewie i wystarczy zachować listę, której wyewidencjonowanie odpowiada której modyfikacji.
Lub możesz użyć Git lokalnie, ale nigdy tego nie próbowałem.
źródło
Niedawno popełniłem ten błąd, że nie wprowadzałem nowych zmian plików (około 10) do SVN i wszystkie zniknęły z powodu mojego głupiego błędu. Ale to, co mnie uratowało, to opcja „Przywróć poprzednie wersje” systemu Windows w menu kontekstowym. Uff, to była ulga i wyciągnięta lekcja.
źródło
Nie możesz odzyskać plików, jeśli używasz klienta wiersza poleceń svn .
Ale możesz je odzyskać, jeśli używasz TortoiseSVN jako swojego klienta svn. TortoiseSVN automatycznie przeniesie je do Kosza. Możesz je stamtąd przywrócić po przypadkowym przywróceniu.
Jest to konfigurowalna opcja w TortoiseSVN. Znajduje się w Ustawienia -> Okno 1 -> Użyj kosza podczas przywracania.
Domyślnie jest zaznaczone, co oznacza, że pliki są przenoszone do kosza. Jeśli chcesz (przeważnie nie chcesz tego wyłączać. Jeśli masz powód, daj mi też znać)
źródło
Jeśli korzystasz z InteliJ, masz szczęście. W górnym menu masz opcję kontroli wersji, a pod nią znajdziesz opcję historii lokalnej, w której znajdziesz całą historię wybranego pliku, w tym wszystkie operacje, które wykonałeś na tym pliku (aktualizacja, zatwierdzenie, przywrócenie).
Powodzenia, Arkde
źródło
Ponadto, jeśli przywróciłeś swój kod .NET (pliki .cs itp.) I zbudowałeś aplikację przed przywróceniem, ale po wprowadzeniu zmian, możesz odzyskać zmiany z pliku zespołu za pomocą dowolnego narzędzia reflektora do przeglądania kodu.
źródło
Miałem ogromne szczęście, że w przeglądarce historii w Eclipse znalazłem lokalny dziennik zmian pliku (wersje lokalne). Sprawdzałem różnice jeden po drugim i przed nadpisaniem dokonałem kilku zapisów pliku.
źródło
Przywróciłem rozwiązanie (Visual Studio + AnkhSVN) i straciłem zmiany kilku plików. Nie mogę znaleźć pliku w koszu.
ALE: odzyskałem utracone pliki za pomocą Handy Recovery, tj. SVN po prostu usuwa moje pliki podczas przywracania.
Użyj dowolnego oprogramowania do odzyskiwania danych, aby odzyskać przywrócone pliki (np. Wersja próbna Handy Recovery )
źródło
Nie, SVN nie prowadzi dziennika ani kopii zapasowej (chociaż istnieje rozwiązanie dla TortoiseSVN wymienione w innych odpowiedziach).
Ale na wypadek, gdyby ktoś przeglądał odpowiedzi i nie zauważył tego komentarza w pytaniu PO:
„Na szczęście w tym przypadku wykonałem„ svn diff> temp.txt ”przed wyjściem z pracy w piątek, a plik temp.txt wciąż znajdował się na moim dysku twardym, więc mogłem wprowadzić ten plik do„ poprawki ”i odzyskać moje utracone zmiany ”.
Wyobrażam sobie, że powszechnym paradygmatem jest zrobienie 'svn diff' PRZED wykonaniem 'svn revert'. Jeśli przyzwyczaisz się to robić, nawet jeśli różnica jest właśnie przekazywana do terminala, masz przynajmniej jedną możliwą drogę do odzyskania utraconych zmian.
źródło