2008-12-03 19 views
38

Pracuję z repozytorium SVN z wieloma projektami. Muszę przenieść kilka projektów z tego repozytorium do poszczególnych repozytoriów, po jednym dla każdego projektu, z zachowaniem historii.Jak zrzucić jeden projekt z repozytorium SVN zawierającego wiele projektów?

Byłem w stanie użyć svnadmin dump do zrzutu całego repozytorium i svnadmin load go do innego repozytorium, ale nie mogę znaleźć sposobu na wyrzucenie tylko jednego projektu z oryginalnego repozytorium, więc mogę załadować go do nowego repozytorium . czy to możliwe? Jeśli tak to jak?

+1

Lubię udostępniać jedną pułapkę, w której wpadłem: filtrowanie podfolderu, odfiltrowuje także tworzenie folderu nadrzędnego. Dlatego trzeba ręcznie utworzyć folder nadrzędny w repozytorium docelowym. –

Odpowiedz

58

Do tego celu można użyć narzędzia svndumpfilter. Książka SVN zawiera numer good explanation, jak to zrobić.

Na przykład, jednym ze sposobów byłoby:


$ svnadmin dump /path/to/repo 
    | svndumpfilter include /proj > dump-file 
$ svnadmin create /new/proj/repo 
$ svnadmin load --ignore-uuid /new/proj/repo < dump-file 
$ svn rm file:///path/to/repo/proj 
+0

Dzięki Avi, właśnie czytałem dokumenty i wygląda na to, że tego potrzebowałem. –

+1

zapomniałeś wprowadzić plik dumpfile do polecenia ładowania svnadmin. – wimh

+0

Dzięki, Wimmel. Tak naprawdę nie zapomniałem; Zapomniałem o ucieczce od znaku niższego od znaku. Naprawiono teraz. – Avi

0

Po prostu niewielki dodatek do @Avi odpowiedź i @Kit komentarz.

Jeśli używasz svndumpfilter, możesz stracić zatwierdzenie, które jest niezbędne do załadowania repozytorium (source).

W moim przypadku:

cat dump | svndumpfilter --drop-empty-revs --renumber-revs include trunk/project > project.dump 
svnadmin load --ignore-uuid /opt/svn/newlocation < project.dump 
<<< Started new transaction, based on original revision 1 
svnadmin: File not found: transaction '0-0', path 'trunk/project' 

Rozwiązaniem było popełnić górną katalogu trunk pierwszy.

+1

To rozwiązanie zmienia numerację wersji. Jeśli nie chcesz przenumerować wersji, po prostu nie używaj --drop-empty-revs i --renumber-revs. – Prikkeldraad

Powiązane problemy