This process worked for me. I take no responsibility for any damage or loss incurred as a result of following or not following these steps or, for that matter, anything else you might do or not do.
- SVN is hosted at
svn.domain.com.au
. - SVN is accessible via
http
(other protocols should work). - GitLab is hosted at
git.domain.com.au
and:- A group is created with the namespace
dev-team
. - At least one user account is created, added to the group, and has an SSH key for the account being used for the migration (test using
ssh [email protected]
). - The project
favourite-project
is created in thedev-team
namespace.
- A group is created with the namespace
- The file
users.txt
contains the relevant user details, one user per line, of the formusername = First Last <[email protected]>
, whereusername
is the username given in SVN logs. (See first link in References section for details, in particular answer by user Casey).
- subversion version 1.6.17 (r1128011)
- git version 1.9.1
- GitLab version 7.2.1 ff1633f
- Ubuntu server 14.04
git svn clone --stdlayout --no-metadata -A users.txt http://svn.domain.com.au/svn/repository/favourite-project
cd favourite-project
git remote add gitlab [email protected]:dev-team/favourite-project.git
git push --set-upstream gitlab master
That's it! Reload the project page in GitLab web UI and you will see all commits and files now listed.
- If there are unknown users, the
git svn clone
command will stop, in which case, updateusers.txt
,cd favourite-project
andgit svn fetch
will continue from where it stopped. - The standard
trunk
-tags
-branches
layout for SVN repository is required. - The SVN URL given to the
git svn clone
command stops at the level immediately abovetrunk/
,tags/
andbranches/
. - The
git svn clone
command produces a lot of output, including some warnings at the top; I ignored the warnings.
- http://stackoverflow.com/questions/79165/migrate-svn-repository-with-history-to-a-new-git-repository/3972103
- https://gitlab.com/gitlab-org/gitlab-ce/blob/master/doc/raketasks/import.md (this method didn't work for me)
- https://github.com/gitlabhq/gitlabhq/issues/4137 (describes why the above didn't work)
- https://github.com/gitlabhq/gitlab-shell/issues/32
This also works for github, just ensure that when creating the project, you don't tick any options like "initialise with README" or "license", or you will need to rebase and/or --force the push.