How do I migrate an SVN repository with history to a new Git repository?

前端 未结 30 2034
离开以前
离开以前 2020-11-22 02:51

I read the Git manual, FAQ, Git - SVN crash course, etc. and they all explain this and that, but nowhere can you find a simple instruction like:

SVN repository in: <

30条回答
  •  天涯浪人
    2020-11-22 03:46

    For GitLab users I've put up a gist on how I migrated from SVN here:

    https://gist.github.com/leftclickben/322b7a3042cbe97ed2af

    Steps to migrate from SVN to GitLab

    Setup

    • 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 git@git.domain.com.au).
      • The project favourite-project is created in the dev-team namespace.
    • The file users.txt contains the relevant user details, one user per line, of the form username = First Last , where username is the username given in SVN logs. (See first link in References section for details, in particular answer by user Casey).

    Versions

    • subversion version 1.6.17 (r1128011)
    • git version 1.9.1
    • GitLab version 7.2.1 ff1633f
    • Ubuntu server 14.04

    Commands

    bash
    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 git@git.domain.com.au: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.

    Notes

    • If there are unknown users, the git svn clone command will stop, in which case, update users.txt, cd favourite-project and git 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 above trunk/, tags/ and branches/.
    • The git svn clone command produces a lot of output, including some warnings at the top; I ignored the warnings.

提交回复
热议问题