Jak wyeksportować (a następnie zaimportować) repozytorium Subversion?

Jestem prawie zajęty projektem, w którym używałem komercyjnego dostawcy SVN do przechowywania kodu źródłowego. Host internetowy, który klient ostatecznie wybrał, zawiera repozytorium jako część pakietu hostingowego, więc teraz, gdy projekt się skończył, chciałbym przenieść repozytorium na swojego hosta internetowego i zakończyć konto komercyjne.

Jak mam to zrobić?

 78
svn
Author: Braiam, 2008-09-08

11 answers

Jeśli chcesz przenieść repozytorium i zachować historię, prawdopodobnie będziesz potrzebował dostępu do systemu plików na obu hostach. Najprostszym rozwiązaniem, jeśli twoim backendem jest FSFS (domyślnie w ostatnich wersjach), jest utworzenie kopii systemu plików całego folderu repozytorium.

Jeśli masz backend Berkley DB, jeśli nie jesteś pewien, co to jest backend, lub jeśli zmieniasz numery wersji SVN, będziesz chciał użyć svnadmin, aby zrzucić stare repozytorium i załadować je do nowego repozytorium. Użycie svnadmin dump da ci kopię zapasową jednego pliku, którą możesz skopiować do nowego systemu. Następnie możesz utworzyć nowe (puste) repozytorium i użyć svnadmin load, które zasadniczo odtworzy wszystkie commity wraz z jego metadanymi (autor, znacznik czasu, itp.).

Możesz przeczytać więcej o procesie zrzutu / ładowania tutaj:

Http://svnbook.red-bean.com/en/1.8/svn.reposadmin.maint.html#svn.reposadmin.maint.migrate

Również, jeśli robisz svnadmin load, Upewnij się, że używasz opcji --force-uuid, lub w przeciwnym razie ludzie będą mieli problemy z przełączeniem się do nowego repozytorium. Subversion używa identyfikatora UUID do wewnętrznej identyfikacji repozytorium i nie pozwala na przełączenie kopii roboczej do innego repozytorium.

Jeśli nie masz dostępu do systemu plików, mogą istnieć inne opcje stron trzecich (lub możesz napisać coś), które pomogą Ci w migracji: zasadniczo będziesz musiał użyć dziennika svn, aby odtworzyć każdą wersję w nowym repozytorium, a następnie naprawić metadane. Będziesz do tego potrzebne są skrypty Hooka pre-revprop-change I post-revprop-change, które zakładają dostęp do systemu plików, więc YMMV. Jeśli nie chcesz zachować historii, możesz zaimportować kopię roboczą do nowego repozytorium. Ale mam nadzieję, że tak nie jest.

 63
Author: Tadmas,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/doraprojects.net/template/agent.layouts/content.php on line 54
2015-05-27 15:52:26

rsvndump zadziałało świetnie dla mnie migracja repozytorium z svnrepository.com na kontrolowany przeze mnie serwer Ubuntu.

Jak zainstalować i używać rsvndump na Ubuntu:

  1. Zainstaluj brakujące zależności (biblioteki" APR " i Subversion)

    sudo apt-get install apache2-threaded-dev
    sudo apt-get install libsvn-dev
    
  2. Zainstaluj rsvndump

    wget http://prdownloads.sourceforge.net/rsvndump/rsvndump-0.5.5.tar.gz
    tar xvfz rsvndump-0.5.5.tar.gz
    cd rsvndump-0.5.5
    ./configure
    make
    sudo make install
    
  3. Zrzut zdalnego repozytorium SVN do lokalnego pliku

    rsvndump http://my.svnrepository.com/svn/old_repo > old_repo_dump
    
  4. Utwórz nowe repozytorium i załaduj je do lokalnego pliku zrzutu

    sudo svnadmin create /opt/subversion/my_new_rep
    sudo svnadmin load --force-uuid /opt/subversion/my_new_repo < old_repo_dump
    
 33
Author: tkdave,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/doraprojects.net/template/agent.layouts/content.php on line 54
2015-11-16 18:30:27

Możesz również użyć svnsync. Wymaga to tylko dostępu tylko do odczytu w repozytorium źródłowym

Więcej na svnbook

 9
Author: Sander Rijken,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/doraprojects.net/template/agent.layouts/content.php on line 54
2015-05-27 15:53:01

Fragment z mojego bloga-notka-dla-siebie
Teraz możesz zaimportować plik zrzutu np. w przypadku migracji między wersjami maszyn / subversion. np. gdybym stworzył plik zrzutu z repozytorium źródłowego i załadował go do nowego repozytorium, jak pokazano poniżej.

CmdShell> svnadmin dump D:\CoderZone2\svn-repos > ReposDump.dmp
CmdShell> svnadmin load D:\CoderZone\svn-repos < ReposDump.dmp
 6
Author: Gishu,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/doraprojects.net/template/agent.layouts/content.php on line 54
2008-09-08 11:29:00

Narzędziem do tego jest

svnadmin dump

Ale aby to działało, potrzebujesz dostępu do systemu plików do repozytorium. A gdy już to masz (i pod warunkiem, że repozytorium jest w formacie FSFS), możesz po prostu skopiować repozytorium do nowej lokalizacji (jeśli jest w formacie BDB, zdecydowanie zaleca się zrzut/załadowanie).

Jeśli nie masz dostępu do systemu plików, musisz poprosić dostawcę repozytorium o udostępnienie dla Ciebie zrzutu (i zmusić go do usunięcia repozytorium-i mieć nadzieję, że comply)

 5
Author: pilif,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/doraprojects.net/template/agent.layouts/content.php on line 54
2008-09-08 11:07:31

Zasadniczo, istnieje wiele sposobów, aby wykonać to zadanie. Temat jest szczegółowo omówiony w SVNBook / Migracja danych repozytorium w innym miejscu, proponuję więc przeczytać dział książki.

Oto krótki opis twoich opcji:

  • To zależy od Twojego środowiska, ale istnieje duża szansa, że po prostu skopiujesz repozytorium na nowy serwer i będzie działać. Musisz zmienić Skrypty Hooka repozytorium po skopiowaniu repo do upewnij się, że działają zgodnie z oczekiwaniami.

  • Możesz użyć svnadmin dump oraz svnadmin load polecenia, aby, ehm, wygenerować pełny zrzut, a następnie załadować go do innego repozytorium na innym serwerze. Będziesz musiał svnadmin create nowe czyste repozytorium, aby załadować do niego zrzut. Należy pamiętać, że podejście dotyczy tylko historii repozytorium i nie przenosi skryptów Hooka i plików konfiguracyjnych repozytorium ! Również musisz przeczytać dostęp do systemu plików oryginalne repozytorium do zrzutu.

  • Od Subversion 1.7, svnrdump narzędzie jest dostępne. Ogólnie rzecz biorąc, naśladuje funkcjonalność svnadmin dump i svnadmin load, ale działa zdalnie. Nie musisz mieć dostępu do systemu odczytu / zapisu plików do oryginalnych i docelowych repozytoriów, ponieważ narzędzie działa zdalnie jak klient Subversion, np. poprzez protokół HTTPS. Więc musisz mieć dostęp do odczytu do oryginalnego repozytorium i Odczyt / Zapis do docelowego.

  • Inna opcja jest do wykorzystania svnadmin hotcopy dowództwo. Polecenie jest najczęściej używane do tworzenia kopii zapasowych, tworzy pełną kopię repozytorium wraz ze skryptami konfiguracyjnymi i hook. Następnie można przenieść repozytorium hotcopied na inny serwer.

 4
Author: bahrep,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/doraprojects.net/template/agent.layouts/content.php on line 54
2013-12-05 08:40:11

Możesz również użyć polecenia svnadmin hotcopy:

svnadmin hotcopy OLD_REPOS_PATH NEW_REPOS_PATH

Pobiera pełną kopię zapasową z repozytorium, zawierającą wszystkie Hooki, pliki konfiguracyjne itp.

Więcej w SVN Book

 4
Author: pirho,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/doraprojects.net/template/agent.layouts/content.php on line 54
2015-05-27 15:53:56

Jeśli nie masz dostępu do repozytorium, wolę rsvndump (zdalny zrzut repozytorium Subversion), aby zrobić plik zrzutu.

 4
Author: Ray,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/doraprojects.net/template/agent.layouts/content.php on line 54
2015-11-16 18:28:40

Zakładając, że masz uprawnienia niezbędne do uruchomienia svnadmin, musisz użyć poleceń dumpi load.

 3
Author: Dan Dyer,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/doraprojects.net/template/agent.layouts/content.php on line 54
2008-09-08 10:59:10

Znalazłem artykuł o tym, jak przenieść repozytoria svn z usługi hostingowej do innego i jak zrobić lokalne kopie zapasowe:

  1. Określ, gdzie będziesz przechowywać swoje repozytoria:

    mkdir ~/repo
    MYREPO=/home/me/someplace ## you should use full path here
    
  2. Teraz Utwórz puste repozytorium svn za pomocą svnadmin create $MYREPO
  3. Utwórz plik Hooka i uczyń go wykonywalnym:

    echo '#!/bin/sh' > $MYREPO/hooks/pre-revprop-change
    chmod +x $MYREPO/hooks/pre-revprop-change
    
  4. Teraz możemy zacząć importować repozytorium z svnsync, które zainicjuje repozytorium docelowe do synchronizacji z innym repozytorium:

    svnsync init file://$MYREPO http://your.svn.repo.here/
    
  5. I końcówka do przeniesienia wszystkich oczekujących wersji do miejsca docelowego ze źródła, z którym została zainicjowana:

    svnsync sync file://$MYREPO
    

Teraz masz lokalne repozytorium svn w katalogu ~/repo.

Źródło:

 3
Author: Braiam,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/doraprojects.net/template/agent.layouts/content.php on line 54
2013-09-06 01:58:49

Możesz znaleźć pomoc przy migracji repozytoriów SVN w Rozdział 5. Administracja repozytorium, migracja repozytorium.

To podejście wymaga dostępu do svnadmin.

 2
Author: erlando,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/doraprojects.net/template/agent.layouts/content.php on line 54
2015-11-16 18:27:24