SVN Unterverzeichnis von einem Repository in ein neues verschiebenSVN HowTo move subdirectory from one repository to another

· 429 words · 3 minute read

Schon länger arbeite ich an einem C++ Projekt, das ich in meinem allgemeinen C++-Repository als Unterverzeichnis eingecheckt hatte. Jetzt hab ich mir eingebildet, dass ich das Projekt in einem eigenen SVN-Repository verwalten möchte. Doch wie? Google hilft natürlich ..

For some time now I’m working on a C++ project, committing my changes to my common C++ repository as a subdirectory. Today I had the idea to have a own SVN repository for this project. Doing some Google search showed me the way ..

Nehmen wir an man hat ein Repository das folgendermassen aufgebaut ist:

/var/svn-repos/cpp
  • dir1

  • dir2

und man möchte nun dir2 in das neue Repository unter

/var/svn-repos/Project1

verschieben. Gar kein Problem mit svnadmin. Als erstes legt man wie gewohnt das neue SVN-Directory an:

svnadmin create --fs-type fsfs /var/svn-repos/Project1

Danach kommt das eigentliche Verschieben. Zuerst dumpen, danach einlesen.

Dump des alten Repository erstellen:

svnadmin dump /var/svn-repos/cpp/ | svndumpfilter include \

–drop-empty-revs –renumber-revs /dir2 > Project1.svndump

Mit svnadmin verwaltet man die SVN-Repositorys am Server. Die Option dump gibt den gesamten Inhalt des Repositorys, auch die Versionierungshistory, in einem speziellen Dump-Format aus. svndumpfilter filtert das Dump-File bei der Ausgabe nach verschiedenen Kriterien. In diesem speziellen Fall werden durch die Option include alle Knoten die nicht spezifiziert sind aus dem Dump-Datenstrom herausgefiltert, wodurch nur der gewünschte Inhalt im Dump-File ankommt. Mit der Option –drop-empty-revs werden alle, durch den Filter ignorierten, leeren Revisioneinträge ingnoriert, die Option –renumber-revs numeriert die noch vorhanden Revisions neu.

Zum Abschluss muss der SVN-Dump noch in das neue Repository eingelesen werden. Dies geschieht erneut mittels svnadmin:

svnadmin load /var/svn-repos/Project1 < Project1.svndump

Fertig.

Imagine there is a repository which looks like the following:

/var/svn-repos/cpp

  • dir1
  • dir2

and dir2 should now be migrated to a new, own repository like

/var/svn-repos/Project1

This is quite easy using svnadmin. First of all we create the new repository:

svnadmin create –fs-type fsfs /var/svn-repos/Project1

Now the moving. First dumping then reloading.

Dump of the old repository data:

svnadmin dump /var/svn-repos/cpp/ | svndumpfilter include
–drop-empty-revs –renumber-revs /dir2 > Project1.svndump

svnadmin is the main administration tool for SVN repositories. Option dump dumps out the complete content of the repository, including the history, using a specific dump-format. svndumpfilter filters the dump stream regarding to the specified criterias. Using option include drops out everything which was not defined from the dump stream - only requested data gets into the dump file. With option –drop-empty-revs every dropped and therefor empty revisions are ignored, –renumber-revs renumbers all revisions which are still dumped out.

Finally the dump must be loaded into the new repository using svnadmin again:

svnadmin load /var/svn-repos/Project1 < Project1.svndump

Finished.