====== Migrating a Subversion repository to Git on your GitLab instance ====== #! /bin/sh # # Migrating a SVN repository to Git # # This script requires a mapping file (users.txt) in this format: # #username1 = firstname1 lastname1 #username2 = firstname2 lastname2 # # To get a list of the author names that SVN uses, you can run this: #svn log ^/ --xml | grep -P "^(.*?)<\/author>/$1 = /' > users.txt # SVN_repository=http://subversion.list.lu/svn/ authors_file=./users.txt GIT_repository_name= GIT_repository_server=git@git.list.lu:/.git git svn clone $SVN_repository --authors-file=$authors_file --no-metadata -s $GIT_repository_name # For a non standard SVN repository: #git svn clone $SVN_repository --no-minimize-url --authors-file=$authors_file --no-metadata -s $GIT_repository_name --trunk=/ cd $GIT_repository_name # Moves the tags to be proper Git tags git for-each-ref refs/remotes/tags | cut -d / -f 4- | grep -v @ | while read tagname; do git tag "$tagname" "tags/$tagname"; git branch -r -d "tags/$tagname"; done # Moves the rest of the references under refs/remotes to be local branches git for-each-ref refs/remotes | cut -d / -f 3- | grep -v @ | while read branchname; do git branch "$branchname" "refs/remotes/$branchname"; git branch -r -d "$branchname"; done # Push the new GIT repository to the Git server git remote add origin $GIT_repository_server git push origin --all git push origin --tags Of course you will have to set the variables //SVN_repository//, //GIT_repository_name// and //GIT_repository_server// appropriately.