Move a SVN repository to Git with the whole commit history
It is in your mind, like a worm that eats away the apple, "I have to switch to Git". And one day it happens and you realize that it was not that diffcult.
I started using Git as my local repository, but still using SVN
as the central repository with git itself thanks to the git
svn
set of commands. After some time I decided to
entirely move the vast majority of projects from SVN to Git but
of course not by creating a new fresh and empty repository but
importing the whole svn commit history, as
if the commits were made using Git itself ten years ago.
This is how you can do it:
Import SVN repo to Git: Transition guide
I did this on mac several times, but you can do it in other systems as well. First of all, open up a terminal, and install the fantastic tool svn2git. The one-liners are:
#Ubuntu only: sudo apt-get install git-core git-svn ruby rubygems # Others: svn2git installation: sudo gem install svn2git --source http://gemcutter.org
Then you have available the new svn2git command. Create a new directory:
mkdir mygitrepo cd mygitrepo/
Depending on the structure of your SVN repositories you have to
play with the options of svn2git, the README is pretty
clear. If you don't want to import the whole trunk/ tags/
branches/
and pick a single branch or folder, no matter
how you named it then you have to do something like this:
svn2git http://svn.myrepo.com/myproject --rootistrunk --username yourusername
Ensure to launch this command inside the new folder! But wait! We forgot to map the SVN usernames to Git usernames.
If you intend to upload this git repo to an external service like
Github or Bitbucket I would recommend using the exact usernames
there are in those services. You need the file that says what SVN
username corresponds with which Git usernames. The file you have
to create is ~/.svn2git/authors
and the syntax looks
like this:
svnusername = gitusername
For instance, the users "albert" and "obokaman", etc... in my local SVN repo correspond to the following in GitHub:
albert = alombarte obokaman = obokaman-com
root = alombarte
pablo = pablor
It is very important that you add all the authors that ever commited to your repository in this ~/.svn2git/authors file. This is why I added root in the example. When this is complete, run the previous command.
Now you have a git repository with all the svn history. Maybe the next thing to do would be uploading the local Git repo to an external service like Github or Bitbucket, keep reading on the next article.