User Tools

Site Tools


gitlab:tips:convert-subversion-to-git

This is an old revision of the document!


Migrating a SVN repository to Git on your GitLab instance

<code bash> #! /bin/sh

# # Migrating a SVN repository to Git # # This script requires a mapping file (users.txt) in this format: # #username1 = firstname1 lastname1 <email1> #username2 = firstname2 lastname2 <email2> # # To get a list of the author names that SVN uses, you can run this: #svn log ^/ –xml | grep -P “^<author” | sort -u | perl -pe 's/<author>(.*?)<\/author>/$1 = /' > users.txt #

SVN_repository=http://subversion.list.lu/svn/<project-name> authors_file=./users.txt GIT_repository_name=<project-name> GIT_repository_server=git@git.list.lu:<group-name>/<project-name>.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 </code

gitlab/tips/convert-subversion-to-git.1453875025.txt.gz · Last modified: 2016/01/27 07:10 by cedric