Jak mogę usunąć dane z lokalnego repozytorium SVN?

2

Przypadkowo popełniłem całą masę plików binarnych przy użyciu opcji „Dodaj folder” TortoiseSVN, kiedy powinienem był użyć „Utwórz folder”. Nie chcę tych plików binarnych w SVN, ponieważ zajmują dużo miejsca na moim HD i tak naprawdę nie korzystają z wersjonowania. Jednak nie jestem pewien, jak najlepiej cofnąć ten bałagan w taki sposób, aby rzeczywiście zwolnić pamięć używaną do zatwierdzania wszystkich tych plików binarnych. Mogę łatwo usunąć wszystkie pliki i zatwierdzić, ale nie jestem pewien, czy to rzeczywiście usunie powiązane z nimi dane z SVN, zwłaszcza z wersji, w której zostały dodane.

Zajrzałem do katalogu repozytorium SVN i znalazłem gigantyczny plik „db / revs / 67”, który, jak zakładam, reprezentuje dane do wersji 67, w której te pliki zostały dodane. Czy mogę po prostu usunąć ten plik, czy też spowoduje to problemy z SVN? Wygląda na to, że musiałbym usunąć lub zmodyfikować pliki gdzie indziej, więc SVN działa tak, jakby te wersje nigdy nie istniały?

Aaron
źródło

Odpowiedzi:

3

Aby bezpiecznie usunąć całkowicie wersję z historii SVN, musisz wyeksportować repozytorium z usuniętą wersją, a następnie przywrócić go z pliku zrzutu. Aby to zrobić, uruchom następujące polecenia na terminalu lub w wierszu polecenia systemu Windows:

svnadmin dump /path/to/repo -r1:66 > svn.dump
ren /path/to/repo /path/to/backup
svnadmin create /path/to/repo
svnadmin load /path/to/repo < svn.dump

(W systemach * nix zastąp ren z mv.)

Po upewnieniu się, że wszystko jest w porządku w nowym repozytorium, możesz usunąć kopię zapasową.

Rozważ użycie svn:ignore właściwość, aby zapobiec przekazywaniu tych plików do repozytorium w przyszłości. Możesz dodać pliki do listy ignorowanych za pomocą TortoiseSVN, klikając je prawym przyciskiem myszy TortoiseSVN i wybór Dodaj do listy ignorowanych .

Patches
źródło
Dzięki. Nie jestem zaznajomiony z wierszem poleceń, czy możesz wyjaśnić: 1) Jak uzyskać wiersz polecenia, aby rozpoznać te polecenia? 2) Czy każda linia jest nowym poleceniem? 3) Kiedy należy określić, gdzie umieścić kopię, czy to w drugim wierszu „ścieżka / do / kopia zapasowa”?
Aaron
... w międzyczasie usunąłem / db / revs / 67 i / db / revprops / 67 i zmieniłem / db / current z "67 1h5 p" na "66 1h5 p" na kopii całego repo. Wydaje się, że zadziałało.
Aaron
@Aaron: Wiersz polecenia w systemie Windows można znaleźć w Start & gt; Wszystkie programy & gt; Akcesoria. Każda linia jest nowym poleceniem (np. Naciśnij klawisz Enter po każdym z nich). Z tego, co rozumiem, usunięcie ostatniej wersji nie powinno powodować żadnych problemów, ale gdyby było to wcześniejsze, repozytorium przestałoby działać.
Patches
Za każdym razem, gdy próbowałem komend svn, po prostu powiedział: „svnadmin nie jest uznanym poleceniem” lub podobnym. Zakładam, że musiałem nawigować do jakiegoś pliku wykonywalnego svn, ale nie mogłem tego zrozumieć.
Aaron
@Aaron: Powinien być C:\Program Files\Subversion\bin (być może C:\Program Files (x86)\Subversion\bin w 64-bitowym systemie Windows), ale jeśli był dostarczany z TortoiseSVN, mógł to być gdzieś inny. Możesz rozejrzeć się wokół Program Files lub Program Files (x86) foldery na pewno. Przejdź do tego katalogu za pomocą cd polecenie, po którym następuje spacja ze ścieżką w cudzysłowie.
Patches