===== Migrar repositorios de subversion (SVN) a Git manteniendo el historial ===== **Objetivo**: Migrar un repositorio subversion (SVN) a GIT. **Qué se necesita**. * Tener un repositorio SVN. * Tener un repositorio Git disponible para subir el contenido del servidor SVN previamente transformado a formato Git. * Tener instalado "git-svn" en el sistema encargado de migrar de un sistema a otro. **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 ' > /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;