I’ve blogged about converting a Subversion repository to git a couple times. While it was a tedious process at first, I’ve made my peace with it and now cannot count the code repositories I have migrated successfully anymore. The migration usually works, except for when I deal with our old provider unfuddle.
For some reason, sometimes it didn’t work right away and I had to re-run git svn clone
a couple of times to get it right.
git svn clone
Here’s a snippet to make it work for you:
Make sure to replace the company and the company_repositoryname part in above scripts.
For some reason, I was never able to get prefix and all that completely right from the start. That is, until now — needless to say the above works. And for the sake of documenting and not re-learning each time (e.g. today, as a migrate another Subversion repository to git (Github :-)), here’s my documentary blog post.
Tags and branches
Tags and branches are slightly different concepts in Subversion and git.
In Subversion, we usually ran pre-processing on tags before we deployed them (because doing this in a branch was a huge pita due to size of the repository and the overall joy of merging commits in Subversion. So in the end, a tag we created in Subversion, is not a tag in git because we modified the tag — which makes it a branch.
So as a follow up to my prior snippet to convert a repostitory, I’ve used this script to convert the branches it created to proper tags in git:
Again, you will have to adjust company_repositoryname in this piece. :-)
Once the script completes, I verify the tags with git tag -l
and delete the branches with git branch -D foo
.
If all looks ok and the tests confirm this, I add an origin, push branches and also git push --tags
.
Fin
That’s all — happy migrating. Just in case: the code is BSD licensed, which means, you can do whatever you want with it.