Migrar repositorios de subversion (SVN) a Git manteniendo el historial

Objetivo: Migrar un repositorio subversion (SVN) a GIT.

Qué se necesita.

Comandos. (Entre corchetes están los comandos que requieren edición: dominio, usuarios, etc.)

##########
svn log -q svn://dominio/repositorio | gawk -F "|" '/^r[0-9]/ { print $2 }' | sort -u | xargs -I {} echo '{}= nombre <usuario@email>' > /root/usuarios
mkdir migracion && cd migracion
git svn init svn://dominio/repositorio --no-metadata
git config svn.authorsfile /root/usuarios
##########
 
git svn fetch
 
########## La creación del fichero .gitattributes es optativo, dependerá de las necesidades de cada repositorio.
#echo '*.gz -delta' > .gitattributes;
#echo '*.jpg -delta'>> .gitattributes;
#echo '*.zip -delta'>> .gitattributes;
#echo '*.pdf -delta'>> .gitattributes;
git svn show-ignore > .gitignore;
#git commit -m "add .gitignore and .gitattributes file";
git commit -m "add .gitignore file";
 
git add .gitignore;
#git add .gitattributes;
 
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
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
 
cd ..
git clone migracion/ myproject
 
cd myproject
git remote rm origin
 
##########
git remote add stash http://usuario@dominio/proyecto/repositorio.git
git config --global user.name "usuario";
git config --global user.email "usuario@dominio"
##########
 
git push stash --all;
git push stash --tags;