2009-03-25 12 views
9

Mam rosnące repozytorium zawierające kilkanaście projektów, które utrzymuję przy użyciu TortoiseSVN (ponieważ jestem zupełnie nowy w tym i nie znam jeszcze tajników). Przestrzeń, w której muszę przechowywać repozytorium, jest ograniczona, więc chcę utworzyć kopię zapasową, a następnie usunąć niektóre ze starszych wersji. Na przykład, jeśli projekt ma wersję 50, chcę zachować tylko 50,49,48.Jaki jest najlepszy sposób na wyczyszczenie repozytorium Subversion?

+2

nr Przenieś repozytorium większej przestrzeni. – yfeldblum

+0

Naprawdę powinieneś przeczytać książkę "Kontrola wersji z Subversion" (wolna jak w piwie) pod adresem http://svnbook.red-bean.com/, aby lepiej zrozumieć punkt kontroli wersji. –

Odpowiedz

1

Nie ma sposobu, aby "wyciąć" repozytorium przy konkretnej wersji w sposób, jaki opisujesz. Co można zrobić, to całe repozytorium w żądanej wersji, a następnie zaimportować je do nowego repozytorium, a następnie odtworzyć zatwierdzenia z wersji po tym ze swojego pliku dziennika do nowego repozytorium. To nie jest trywialne.

Ewentualnie, jeśli chcesz po prostu wykluczyć niektóre bałagan ścieżek z repozytorium, a masz bezpośredni dostęp do systemu plików, w którym repozytorium przebywa, można użyć kombinacji svnadmin i svndumpfilter wybrać ścieżki, które chcesz i przycinać wszystkie inne.

Zauważ, że to, co opisujesz, jest mniej lub bardziej przeciwne Subversion: ma wszystko zatrzymać. Jeśli często masz z tym problemy, rozważ ustanowienie lepszych praktyk kontrolnych. Lub rozważ użycie opcji Git, co sprawia, że ​​tego rodzaju eksperymenty są praktycznie bezpłatne.

+0

Oddziały (svn copy) w subwersji są prawie darmowe, zarówno w czasie, jak i w przestrzeni. Począwszy od subwersji 1.6, scalanie poprawek między oddziałami korzysta z udostępniania reprezentacji, aby uniknąć duplikowania danych. Nie mam pojęcia, o co ci chodzi, mówiąc: "gałęzie są drogie w svn". –

+0

Generalnie, ingerowanie w svn-dumpfilter jest o wiele bardziej pracochłonne niż zakłócanie git-filter-branch i/lub .git/info/grafts. Naprawiłem system plików svn-dumpfilter, aby obsługiwać więcej edycji historii, a to wciąż nie jest dobre narzędzie. – emk

+0

@wcoenen: Masz rację. Nie wypowiedziałem tego bardzo dobrze. @emk: Zgoda, to dość okropne. Obecnie używam głównie Gita. –

12

Usunięcie starych wersji niszczy punkt kontroli wersji, ale możesz po prostu zrzucić poprawki, które chcesz zachować, a następnie umieścić je w nowym repozytorium i usunąć stare.

svnadmin dump /path/to/current/repo -r48:50 > svn.dump 
svnadmin create /path/to/new/repo 
svnadmin load /path/to/new/repo < svn.dump 

Albo użyć svndumpfilter do włączenia/wyłączenia poszczególnych bitów chcesz, itp również niektóre informacje w SVN najczęściej zadawane pytania na temat removal, które mogą być użyteczne.

+0

Czy to nie będzie tylko zrzucanie określonych * zatwierdzeń * z wersji 48 do 50? Myślę, że szuka stanu repozytorium, tak jak to było w wersji 48, a nie tylko zatwierdzenia. –

+0

Po prostu próbowałem tego. Nie robi to, co myślę, że OP chce: dostaje * tylko * zatwierdzenia z tych wersji. Nie dostaniesz "stanu repozytorium w wersji 48, a następnie wszystkich zatwierdzeń niezbędnych do wprowadzenia wersji 50." –

+0

John: jak się masz? Działa to dobrze dla mnie. Zrzuca on w całości pierwszą podaną wersję, a następnie zatwierdza do ostatniej podanej rewizji. Tylko jeśli określisz przełącznik "--deltas", po prostu zrzuci zatwierdzenia. –

4

Czy mogę usunąć starsze wersje lub repozytoria, aby zwolnić miejsce do magazynowania?

Krótka odpowiedź brzmi: nie. Sposób działania Subversion i CVS polega na tym, że zachowują całą historię zmian, w tym usuniętych plików, plików binarnych itp. Każda wersja jest zależna od ostatniej wersji, więc nie możesz po prostu odszukać wersji gdzieś w środku lub uszkodzić twoje repozytorium. Są dwie rzeczy, które możesz zrobić, gdy zabraknie ci miejsca: 1) Usuń swój moduł i ponownie go stwórz, używając tylko wersji HEAD, która usunie wszystkie stare wersje (ale stracisz historię zatwierdzania). 2) Lepsza opcja - uaktualnij do wyższego planu :-). Jest to mniejszy problem z Git, ponieważ ma znacznie mniej miejsca na dysku po stronie serwera.

Jak całkowicie usunąć plik z historii repozytorium?

Istnieją specjalne przypadki, w których można zniszczyć wszystkie dowody pliku lub zatwierdzenia. (Być może ktoś przypadkowo popełnił poufny dokument.) To nie jest takie proste, ponieważ Subversion jest celowo zaprojektowany, aby nigdy nie stracić informacji. Rewizje są niezmiennymi drzewami, które opierają się na sobie nawzajem. Usunięcie wersji z historii spowodowałoby efekt domina, tworząc chaos we wszystkich późniejszych wersjach i prawdopodobnie unieważniając wszystkie działające kopie.

Projekt ma jednak plan, aby pewnego dnia zaimplementować komendę svnadmin unicest, która wykona zadanie trwale usuwając informacje. (Patrz wydanie 516.)

Tymczasem jedyną możliwością jest svnadmin zrzucenie twojego repozytorium, a następnie przepuszczenie pliku dump przez svndumpfilter (z wyłączeniem złej ścieżki) do polecenia load svnadmin. Więcej informacji na ten temat znajduje się w rozdziale 5 książki Subversion.

cyt:

http://subversion.apache.org/faq.html#removal

http://codesion.com/benefits/faq.htm#deleterevisions

Powiązane problemy