Wenn die Struktur Code-Repository nicht mehr dem Idealzustand entspricht, bietet sich ein Refactoring an, also eine neue Aufteilung der darin enthaltenen Projekte. Dieser Artikel zeigt, wie man Projekte (Verzeichnisse) in ein neues Repository migriert und aus dem ursprünglichen Repository entfernt. Auch bei einer Migration zu git kann dies sinnvoll sein, da git Repositories oft eine andere Struktur haben. Bei git ist es beispielsweise nicht möglich nur einen Unterpfad des Repositories auszuchecken, was bei SVN gang und gebe ist.

Sowohl das Löschen eines Verzeichnisses als auch die Migration basieren auf Dumpfiles. Das Erstellen eines Dumpfiles ist der erste Schritt:

svnadmin dump /var/svn/mein-repository > mein-repository.dump

Dann können wir aus dem Dump ein Pfad extrahieren. Die optionale Angabe --drop-empty-revs --renumber-revs bewirkt, dass beim Filtern leere Revisionen ignoriert werden sollen und der verbleibenden Revisionen neu nummeriert werden sollen:

svndumpfilter --drop-empty-revs --renumber-revs include mein/projekt1 < mein-repository.dump > projekt1.dump

Für jedes Projekt kann dann ein neues Repository erstellt und das Dumpfile importiert werden:

svnadmin create projekt1-repository
svnadmin load --ignore-uuid projekt1-repository < projekt1.dump

Sollte es bei svnadmin load zu "File not found"-Fehlern kommen, schafft oft das Anlegen der Verzeichnisse bis eine Ebene unter dem beanstandetem Verzeichnis Abhilfe. Bei SVN-Kopien muss man ebenfalls aufpassen: hier sollte man die Quelle der Kopie ebenfalls bei svndumpfilter include aufnehmen.

Als Alternative zu svndumpfilter include gibt es svndumpfilter exclude um Verzeichnisse auszuschließen. Dies ist auch praktisch um Dateien aus einem Repository zu löschen, die man versehentlich eingecheckt hat. Eine Kombination von include und exclude ist nicht möglich.

Hinterlasse einen Kommentar