I'm using svn2git to test the migration of an svn repo to a git. Now my svn is build like thise
myproj
contains
repo1 /
repo2 (obsolete)/
old/
Every repo contains its own branches, tags etc. I only need everything which is in repo1. When I start the process I get this:
svn2git https://server/myproj/repo1 --username LVO
output:
Initialized empty Git repository in /folder/.git/
Using higher level of URL: https://server/myproj/repo1 => https://server/myproj
And than the process starts. I'm afraid it's taking all the other old repo's too. Is this the right way to start it?:
$ svn2git https://server/myproj/repo1 --username xxx --trunk=/repo1 --branches=/repo1 --tags=/repo1
(especially the trunk thing is not clear for me). How do I have to launch svn2git when my repo is in this tree.
For a one-time migration git-svn
is not the right tool for conversions of repositories or parts of repositories. It is a great tool if you want to use Git as frontend for an existing SVN server, but for one-time conversions you should not use git-svn
, but svn2git
which is much more suited for this use-case.
The svn2git
tool you use is based on git-svn
and thus suffers from most of the same drawbacks, only fixing some in the post-clone actions.
There are plenty tools called svn2git
, the probably best one is the KDE one from https://github.com/svn-all-fast-export/svn2git. I strongly recommend using that svn2git
tool. It is the best I know available out there and it is very flexible in what you can do with its rules files.
You will be easily able to configure svn2git
s rule file to produce the result you want from your current SVN layout, including any complex histories.
If you are not 100% about the history of your repository, svneverever
from http://blog.hartwork.org/?p=763 is a great tool to investigate the history of an SVN repository when migrating it to Git.
Even though git-svn
(or the svn2git
that is based on it) is easier to start with, here are some further reasons why using the KDE svn2git
instead of git-svn
is superior, besides its flexibility:
svn2git
(if the correct one is used), this is especially the case for more complex histories with branches and merges and so ongit-svn
the tags contain an extra empty commit which also makes them not part of the branches, so a normal fetch
will not get them until you give --tags
to the command as by default only tags pointing to fetched branches are fetched also. With the proper svn2git tags are where they belongsvn2git
, with git-svn
you will loose history eventuallysvn2git
you can also split one SVN repository into multiple Git repositories easilysvn2git
than with git-svn
You see, there are many reasons why git-svn
is worse and the KDE svn2git
is superior. :-)