2008-12-03 4 views
38

Ich arbeite mit einem SVN-Repository mit vielen Projekten. Ich muss einige der Projekte aus diesem Repository in einzelne Repositories verschieben, eines für jedes Projekt, wobei der Verlauf beibehalten wird.Wie kann ich ein Projekt aus einem SVN-Repository auslagern, das mehrere Projekte enthält?

Ich konnte svnadmin dump verwenden, um das gesamte Repository und svnadmin load in ein anderes Repository zu dumpen, aber ich finde keine Möglichkeit, nur ein Projekt aus dem ursprünglichen Repository zu speichern, damit ich es in das neue Repository laden kann . Ist das möglich? Wenn das so ist, wie?

+1

Ich mag es, eine Falle zu teilen, die ich lief: Filtern für einen Unterordner, filtert auch die Erstellung des übergeordneten Ordners. Also muss man den übergeordneten Ordner manuell im Ziel-Repository erstellen. –

Antwort

58

Sie können dazu das Dienstprogramm svndumpfilter verwenden. Das SVN Buch hat eine good explanation von wie dies zu tun ist.

Zum Beispiel ist eine Art und Weise wäre:


$ 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

Danke Avi, ich habe gerade die Dokumentation gelesen und es sieht so aus, als ob ich das brauchte. –

+1

haben Sie vergessen, die Dumpdatei in den Befehl svnadmin load einzugeben. – wimh

+0

Danke, Wimmel. Ich habe es nicht wirklich vergessen; Ich habe vergessen, dem weniger als-Zeichen zu entkommen. Jetzt behoben. – Avi

0

Nur eine kleine Ergänzung Antwort und @Kit Kommentar @Avi.

Wenn Sie svndumpfilter verwenden, können Sie ein Commit verlieren, das zum Laden des Repositorys erforderlich ist (source).

In meinem Fall:

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' 

Die Lösung war ein oberes Verzeichnis trunk zuerst zu begehen.

+1

Diese Lösung nummeriert die Revisionen neu. Wenn Sie die Revisionen nicht neu nummerieren wollen, verwenden Sie nicht --drop-empty-revs und --renumber-revs. – Prikkeldraad

Verwandte Themen