svn2git is a Ruby wrapper around git’s native SVN support through git-svn, helping you with migrating projects from Subversion to Git, keeping history (incl. trunk, tags and branches history).

Examples

To migrate a svn repository with the standard layout (ie. branches, tags and trunk at the root level of the repository):

$ svn2git <http://svn.example.com/path/to/repo>

To migrate a svn repository which is not in standard layout:

$ svn2git <http://svn.example.com/path/to/repo> --trunk trunk-dir --tags tags-dir --branches branches-dir

In case you do not want to migrate (or do not have) branches, tags or trunk you can use options --notrunk, --nobranches, and --notags.

For example, $ svn2git <http://svn.example.com/path/to/repo> --trunk trunk-dir --notags --nobranches will migrate only trunk history.

To reduce the space required by your new repository you may want to exclude any directories or files you once added while you should not have (eg. build directory or archives):

$ svn2git <http://svn.example.com/path/to/repo> --exclude build --exclude '.*\\.zip$'

Post-migration optimization

If you already have a few thousand of commits (or more) in your newly created git repository, you may want to reduce space used before pushing your repository on a remote. This can be done using the following command:

$ git gc --aggressive

Note: The previous command can take up to several hours on large repositories (tens of thousand of commits and/or hundreds of megabytes of history).