Wie exportiere (und importiere) ich ein Subversion-Repository?


82

Ich bin gerade dabei, ein Projekt abzuschließen, bei dem ich einen kommerziellen SVN-Anbieter zum Speichern des Quellcodes verwendet habe. Der Webhost, den der Kunde letztendlich ausgewählt hat, enthält ein Repository als Teil des Hosting-Pakets. Nachdem das Projekt abgeschlossen ist, möchte ich das Repository auf seinen Webhost verschieben und das kommerzielle Konto einstellen.

Wie würde ich das machen?

Antworten:


68

Wenn Sie das Repository verschieben und den Verlauf beibehalten möchten, benötigen Sie wahrscheinlich auf beiden Hosts Zugriff auf das Dateisystem. Die einfachste Lösung, wenn Ihr Backend FSFS ist (die Standardeinstellung in neueren Versionen), besteht darin, eine Dateisystemkopie des gesamten Repository-Ordners zu erstellen.

Wenn Sie ein Berkley DB-Backend haben, sich nicht sicher sind, was Ihr Backend ist, oder wenn Sie die SVN-Versionsnummern ändern, sollten Sie svnadmin verwenden, um Ihr altes Repository zu sichern und in Ihr neues zu laden Repository. Wenn svnadmin dumpSie verwenden, erhalten Sie eine einzelne Dateisicherung, die Sie auf das neue System kopieren können. Anschließend können Sie das neue (leere) Repository erstellen und verwenden svnadmin load, wodurch im Wesentlichen alle Commits zusammen mit den Metadaten (Autor, Zeitstempel usw.) wiedergegeben werden.

Weitere Informationen zum Dump / Load-Prozess finden Sie hier:

http://svnbook.red-bean.com/de/1.8/svn.reposadmin.maint.html#svn.reposadmin.maint.migrate

Wenn Sie dies tun svnadmin load, stellen Sie außerdem sicher, dass Sie die --force-uuidOption verwenden, da sonst Probleme beim Wechsel zum neuen Repository auftreten können. Subversion verwendet eine UUID, um das Repository intern zu identifizieren, und ermöglicht es Ihnen nicht, eine Arbeitskopie in ein anderes Repository zu wechseln.

Wenn Sie keinen Zugriff auf das Dateisystem haben, gibt es möglicherweise andere Optionen von Drittanbietern (oder Sie können etwas schreiben), die Sie bei der Migration unterstützen: Im Wesentlichen müssten Sie das SVN-Protokoll verwenden, um jede Revision im neuen Repository wiederzugeben, und Korrigieren Sie anschließend die Metadaten. Dazu benötigen Sie die Hook-Skripte Pre-Revprop-Change und Post-Revprop-Change, die den Zugriff auf das Dateisystem voraussetzen, also YMMV. Wenn Sie den Verlauf nicht beibehalten möchten, können Sie Ihre Arbeitskopie zum Importieren in das neue Repository verwenden. Aber hoffentlich ist das nicht der Fall.


28
Seit 1.7 können Sie jetzt svnrdump verwenden, für das keine Administratorrechte auf den Remote-Repos erforderlich sind. Befehl ist einfach : svnrdump dump https//remote/svn/trunk > repos.dump. In den meisten Fällen funktioniert der Befehl auch mit SVN 1.6, es können jedoch einige Probleme auftreten (siehe Dokumentation). Funktioniert sowohl unter * nix als auch unter Windows.
Abel

34

rsvndump hat bei der Migration eines Repositorys von svnrepository.com auf einen von mir kontrollierten Ubuntu-Server hervorragend funktioniert.

So installieren und verwenden Sie rsvndump unter Ubuntu:

  1. Installieren Sie fehlende Abhängigkeiten ("APR" - und Subversion-Bibliotheken)

    sudo apt-get install apache2-threaded-dev
    sudo apt-get install libsvn-dev
    
  2. Installieren Sie 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. Speichern Sie das Remote-SVN-Repository in einer lokalen Datei

    rsvndump http://my.svnrepository.com/svn/old_repo > old_repo_dump
    
  4. Erstellen Sie ein neues Repository und laden Sie es in die lokale Dump-Datei

    sudo svnadmin create /opt/subversion/my_new_rep
    sudo svnadmin load --force-uuid /opt/subversion/my_new_repo < old_repo_dump
    

7
So migrieren Sie eine vorhandene Arbeitskopie: svn switch --relocate http://my.svnrepository.com/svn/old_repo http://newserver.com/svn/my_new_repo
tkdave

Was genau macht die Force-UUID-Option? Kopiert es die Verzeichnisberechtigungen von der Quelle oder etwas anderem?
Montag451

1
Die UUID ist die "universelle eindeutige Kennung" eines Repositorys. Sie können nur dann zum verschobenen Repository wechseln, wenn die UUID übereinstimmt. Beachten Sie, dass Sie die UUID auch später mit dem Befehl svnadmin setuuid festlegen können.
Tkdave


8

Auszug aus meinem Blog-Hinweis an mich :

Jetzt können Sie eine Dump-Datei importieren, z. B. wenn Sie zwischen Maschinen / Subversion-Versionen migrieren. Beispiel, wenn ich eine Dump-Datei aus dem Quell-Repository erstellt und wie unten gezeigt in das neue Repository geladen habe.

Befehle für Unix-ähnliche Systeme (vom Terminal):

svnadmin dump /path/to/your/old/repo > backup.dump
svnadmin load /path/to/your/new/repo < backup.dump.dmp

Befehle für Microsoft Windows-Systeme (von der cmd-Shell):

svnadmin dump C:\path\to\your\old\repo > backup.dump
svnadmin load C:\path\to\your\old\repo < backup.dump

5

Das Werkzeug dafür wäre

svnadmin dump

Damit dies funktioniert, benötigen Sie jedoch Dateisystemzugriff auf das Repository. Sobald Sie dies haben (und vorausgesetzt, das Repository hat das FSFS-Format), können Sie das Repository einfach an seinen neuen Speicherort kopieren (wenn es im BDB-Format vorliegt, wird Dump / Load dringend empfohlen).

Wenn Sie keinen Zugriff auf das Dateisystem haben, müssen Sie Ihren Repository-Anbieter bitten, den Speicherauszug für Sie bereitzustellen (und ihn dazu bringen, sein Repository zu löschen - und hoffen, dass er den Anforderungen entspricht).


5

Wenn Sie keinen Dateizugriff auf das Repository haben, bevorzuge ich rsvndump (Remote-Subversion-Repository-Dump), um die Dump-Datei zu erstellen.


Ich habe das heute auf die harte Tour gelernt. Es stellte sich heraus, dass neue SVNS alte Repos für korrupt halten. Die Verwendung von Dumps löste dies.
Eule

4

Grundsätzlich gibt es viele Möglichkeiten, die Aufgabe zu erfüllen. Das Thema wird in SVNBook | ausführlich behandelt Repository-Daten an anderer Stelle migrieren , daher empfehle ich, den Abschnitt des Buches zu lesen.

Hier ist eine kurze Beschreibung Ihrer Optionen:

  • Es hängt von Ihrer Umgebung ab, aber es besteht eine große Chance, dass Sie das Repository einfach auf den neuen Server kopieren können und es funktioniert. Sie müssen die Repository-Hook-Skripte nach dem Kopieren des Repos überarbeiten, um sicherzustellen, dass sie wie erwartet funktionieren.

  • Sie können svnadmin dumpund svnadmin loadBefehle verwenden, um einen vollständigen Speicherauszug zu generieren und ihn dann in ein anderes Repository auf einem anderen Server zu laden. Sie benötigen svnadmin createein neues sauberes Repository, um den Speicherauszug darin zu laden. Beachten Sie, dass der Ansatz nur den Repository-Verlauf behandelt und keine Hook-Skripte und Repository-Konfigurationsdateien verschiebt ! Außerdem müssen Sie über einen Lesezugriff des Dateisystems auf das ursprüngliche Repository verfügen, um es zu sichern.

  • Seit Subversion 1.7 ist das svnrdumpTool verfügbar. Im Allgemeinen ahmt es svnadmin dumpund svnadmin loadFunktionalität nach, arbeitet aber remote. Sie müssen keinen Lese- / Schreib-Dateisystemzugriff auf Original- und Ziel-Repositorys haben, da das Tool wie ein Subversion-Client remote arbeitet, z. B. über das HTTPS-Protokoll. Sie müssen also Lesezugriff auf das ursprüngliche Repository haben und in das Ziel-Repository lesen / schreiben.

  • Eine andere Möglichkeit ist die Verwendung eines svnadmin hotcopyBefehls. Der Befehl wird hauptsächlich zu Sicherungszwecken verwendet. Er erstellt eine vollständige Kopie des Repositorys einschließlich Konfigurations- und Hook-Skripten. Sie können das Hotcopy-Repository dann auf einen anderen Server verschieben.


4

Sie können auch den folgenden svnadmin hotcopyBefehl verwenden:

svnadmin hotcopy OLD_REPOS_PATH NEW_REPOS_PATH

Es wird eine vollständige Sicherung aus dem Repository erstellt, einschließlich aller Hooks, Konfigurationsdateien usw.

Mehr bei SVN Book


1
Eigentlich ist es svnADMIN hotcopy. Dies bedeutet, dass auch dies Zugriff auf das Repository-Dateisystem erfordert!
Pilif


3

Ich habe einen Artikel darüber gefunden, wie man SVN-Repositorys von einem Hosting-Dienst auf einen anderen verschiebt und wie man lokale Backups erstellt:

  1. Definieren Sie, wo Sie Ihre Repositorys speichern möchten:

    mkdir ~/repo
    MYREPO=/home/me/someplace ## you should use full path here
    
  2. Erstellen Sie nun ein leeres SVN-Repository mit svnadmin create $MYREPO
  3. Erstellen Sie eine Hook-Datei und machen Sie sie ausführbar:

    echo '#!/bin/sh' > $MYREPO/hooks/pre-revprop-change
    chmod +x $MYREPO/hooks/pre-revprop-change
    
  4. Jetzt können wir mit dem Import des Repositorys beginnen svnsync, wodurch ein Ziel-Repository für die Synchronisierung aus einem anderen Repository initialisiert wird:

    svnsync init file://$MYREPO http://your.svn.repo.here/
    
  5. Und der letzte Schliff, um alle ausstehenden Revisionen von der Quelle, mit der sie initialisiert wurden, an das Ziel zu übertragen:

    svnsync sync file://$MYREPO
    

Dort haben Sie jetzt ein lokales SVN-Repository im ~/repoVerzeichnis.

Quelle:


Durch die Nutzung unserer Website bestätigen Sie, dass Sie unsere Cookie-Richtlinie und Datenschutzrichtlinie gelesen und verstanden haben.
Licensed under cc by-sa 3.0 with attribution required.