Davide Gerosa

Farewell SVN, I’m a GIT guy now!

This is a supershort guide to migrate old SVN repositories to GIT, and from one GIT server to another…

SVN to GIT

I was using SVN to handle my research projects, then discovered GIT and it’s definitely another life. The are a few things that are different between the two systems, although some commands are similar, which may indeed be confusing. There are a billion of GIT tutorials on the web, but if you’re looking for a recommendation, I found this page from Bitbucket very nice!

So, you have many SVN repos and want to switch to GIT? I am going to assume you have very simple SVN repositories (one single branch, no tags) like I used to have. If you have a more complicated structure, have a look here and here.

You need the git-svn tool. It should be there by default, but if you don’t have you can easily install it from your package manager.

First, enter some directory in your local machine (e.g. where you keep all your geek stuff on GIT, say repositories).

cd ~/repositories

Now, clone your old SNV repository using git svn. Of course, you need access to it: in the example below I use the svn+ssh protocol, but you may have http here depending on your setup (just to be clear, this is the same link you used to checkout the SVN repo in the first place)

git svn clone svn+ssh://USER@HOST/PATH/SVNNAME

where USER, HOST, PATH and SVNNAME are the coordinates of your SVN repo.

If you want a remote host (and believe me, you do!), you need to create a repository on some online service. I will use bitbucket in the example below (I like it a lot, mainly because it gives free unlimited everything to scientists!) but Github is also a popular choice. Assuming you have created a repository on the bitbucket website,  just add it and push.

cd SVNNAME
git remote add origin [email protected]:USERNAME/GITNAME
git push origin --all

GIT to GIT

If you’re already a GIT convert, another useful thing I needed to do is migrate from one server to another (say from bitbucket to Github, etc). There are a million solutions if you google this problem, but this is by far the best one:

git clone --mirror [email protected]:USERNAME/OLD_GITNAME
cd OLD_GITNAME.git
git remote set-url origin [email protected]:USERNAME/NEW_GITNAME
git push --mirror origin

Update: repo too big?

I recently tried to run these commands again, and found out one of my old svn repo was too big for either bitbucket or github. For instance, bitbucket has a soft limit of 1GB and a hard limit of 2GB… Just want to say that this tool called bfg is great to reduce a repo size while removing only some of the previous history.

That’s all folks, all previous history and commits are now safely stored in GIT. And of course, if you have troubles the following trick ALWAYS works:

git.png

Credit: xkcd n. 1597