How to migrate SVN projects to Git

Create a users.txt file. It will be used to map the SVN users to an email.

For example:

1
2
l.lin = Louis LIN <louis.lin@yopmail.com>
foo.bar = Foo BAR <foo.bar@yopmail.com>

Execute the following command:

1
git svn clone --trunk=/trunk --branches=/branches --tags=/tags --authors-file=users.txt http://<path_to_svn_project> <project_name>

It will only create the master branch in local. So you will need to create the tags using the following command:

1
2
git for-each-ref refs/remotes/origin/tags | cut -d / -f 5- | grep -v @ | \
while read tagname; do git tag "$tagname" "origin/tags/$tagname"; git branch -r -d "origin/tags/$tagname"; done

You might need to adapt the command a little bit if your branch tags are not called remotes/origin/tags/<tagname>.

Then you will need to create the branches using the following command:

1
2
git for-each-ref refs/remotes/origin | cut -d / -f 4- | grep -v @ | \
while read branchname; do git checkout -b "$branchname" "origin/$branchname"; done

Finally, add your remote and push all:

1
2
3
git remote add origin https://<path_to_git_project>
git push --all
git push --tags