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.