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
@cbscd The
users.txt
file should contain an entry for all of the users mentioned in the SVN history. It doesn't matter whether the user is currently able to access the repository, all that matters is that they are listed in the history. If there is a user in the SVN history that isn't represented in theusers.txt
file, the process will fail, but you can update theusers.txt
file with the missing user and start again.