Subversion umzug und herauslösen

So da stand ich mal wieder vor einen Problem, jetzt hast ein SVN-Repository auf dem alten Rechner aber man bräuchte es in einer VM auf den eigenen Rechner. Zuerst dachte ich an einfaches FileCopy, aber ob das im Sinne der Entwickler ist, ich wage es irgendwie zu bezweifeln.

Deswegen habe ich mich auf die Suche nach einer anderen Möglichkeit gemacht und siehe da es gibt sie:

svnadmin dump /repos/pfad > MeinKomplettesRepos.dmp  
svnadmin create /neues/repos  // Wird nur bei Bedarf benoetigt  
svnadmin load  /neues/repos < MeinKomplettesRepos.dmp

Der erste Befehl exportiert das Komplette Repositority und mit dem letzten wird der komlette export in das neue Repositority eingepflegt. Mit dem Parameter -q [-quiet] wird die Ausgabe des Fortschrittes über den stderr-Kanal unterdrückt, so das nur noch Fehler angezeigt werden und nicht mehr bei welcher Revision grad der Dump ist.

Da ich mich nach dem lesen gefragt habe für was dann svndumpfilter benötigt wird hier ein kleines Beispiel dazu:

svnadmin dump /repos/pfad > KomplettesSVN.dmp  
cat KomplettesSVN.dmp | svndumpfilter include GesuchtesProjekt > NurGesuchtesProjekt.dmp  
svnadmin load /repos/NurGesuchtes > NurGesuchtesProjekt.dmp

Hiermit wird zuerst wieder das komplette Repositority rausgeholt, dann wird ein einzelnes Projekt aus dem kompletten Dump extrahiert (GesuchtesProjekt) und nur dieses dann in ein neues Repositority geladen.

Noch ein Paar informatione zum svndumpfilter:

-drop-empty-revs

Überhaupt keine leeren Revisionen erzeugen – einfach auslassen.

-renumber-revs

Falls leere Revisionen ausgelassen werden (mit der Option -drop-empty-revs), die Nummern der übrig gebliebenen Revisionen ändern, so dass keine Lücken in der Nummernfolge auftreten.

-preserve-revpos

Falls leere Revisionen nicht ausgelassen werden, die Eigenschaften der leeren Revisionen bewahren (Protokolleintrag, Autor, Datum, Propertys usw.). Sonst beinhalten leere Revisionen lediglich den Zeitstempel und einen erzeugten Protokolleintrag, der darauf hinweist, dass diese Revision von svndumpfilter geleert wurde.

Und wenn jetzt noch gewünscht wird das die einzelnen Repos ihre Ordnerstrukture verändern, dann muss man leider die Dump-Datei per Hand anfassen. Zum einen muss man “Node-path”- sowie die “Node-copyfrom-path”-Angaben verbiegen. Beispiel für VIM aufruf:

:%s/Node-path: [MyProj]\//Node-path: /  
:%s/Node-copyfrom-path: [MyProj]\//Node-copyfrom-path: /

Und das Anlegen des Haupt-Ordners sollte entfernt werden, dafür muss man noch so einen Eintrag schauen (Und alles, auch das PROPS-END, entfernen. Vorsicht aber des vorgehende PROPS-END stehen lassen):

Node-path: [MyProj]  
Node-action: add  
Node-kind: dir  
Prop-content-length: 10  
Content-length: 10

PROPS-END

Links die geholfen haben: