Migrar de subversion a GIT

En la migración que vamos a realizar, mantendremos tanto los logs como todos sus branches y tags desde un SCV a otro.

Para poder seguir este manual necesitaremos un paquete llamado

git-svn

el cual, según la distribución que usemos, se hará de un modo u otro

Ubuntu, Debian y derivados

apt-get install git-svn

CentOS y derivados

yum install git-svn

1. Creación del repositorio GIT de destino

Para crear el repositorio GIT hacemos uso de un pequeño script que donde se le pasa como único parámetro el nombre del repositorio:

sh makegit.sh mirepo

En este script debes de modificar la definición de las constantes de las primeras líneas para ajustarlo a tu entorno

#!/bin/sh

GIT_OWNER="__NOMBRE__PROPIETARIO__"
GIT_EMAIL="__EMAIL_PROPIETARIO__"
GIT_HOME="__RUTA_COMPLETA_DIRECTORIO_GIT__"
GIT_REPO=$1".git"

cd ${GIT_HOME}
mkdir ${GIT_REPO}
cd ${GIT_REPO}

git init --bare
git config --global user.name ${GIT_OWNER}
git config --global user.email ${GIT_EMAIL}
git repo-config core.sharedRepository true

cd ${GIT_HOME}
chown -R git:git ${GIT_REPO}
chmod -R 775 ${GIT_REPO}
chmod -R g+ws ${GIT_REPO}
chgrp -R git ${GIT_REPO}

Lo ejecutamos y creamos el nuevo repositorio GIT.

2. Creamos repositorio GIT vacío

Este repositorio es donde vamos a volcar y transformar todos los datos desde el subversion

cd /tmp/
git svn init -s https://svn.miservidor.com/mirepo migracion
cd migracion

3. Usuarios remotos subversion

El siguiente paso es crear un fichero donde vamos a ir poniendo los usuarios subversion, para poder tener la relación de los logs correctamente.

Este fichero tiene el siguiente formato, no debiendo omitir ningún dato

nombre_usuario_1 = Nombre del Usuario 1 <mail1@usuario.com>
nombre_usuario_2 = Nombre del Usuario 2 <mail2@usuario.com>

lo guardamos en el fichero

usuarios

y ejecutamos

git config svn.authorsfile usuarios
git svn fetch
git branch -r | sed -rne 's, *tags/([^@]+)$,\1,p' | while read tag; do echo "git tag $tag 'tags/${tag}^'; git branch -r -d tags/$tag"; done | sh
git branch -r | grep -v tags | sed -rne 's, *([^@]+)$,\1,p' | while read branch; do echo "git branch $branch $branch"; done | sh

compactamos el repositorio y quitamos la metadata del subversion

git repack -d -f -a --depth=50 --window=100
git config --remove-section svn-remote.svn
git config --remove-section svn
rm -r .git/svn

Para poder sacar la lista completa de usuarios subversion desde la misma máquina donde tenemos el repositorio de subversion, podemos ejecutar

svn log -q https://svn.miservidor.com/mirepo | grep -e '^r' | awk 'BEGIN {FS="|"};{print $2}'|sort|uniq

y veremos la lista de todos los usuarios que necesitamos crear en GIT para mantener el log completo y correcto.

4. Integración en GIT

Una vez tenemos el repositorio de subversion pasado a GIT, bastará con asociar el origen y hacer el "push"

cd /tmp/migracion
git remote add origin git@miservidor.com:mirepo.git
git push --all && git push --tags

y con esto ya tenemos migrado nuestro repositorio subversion a nuestro servidor GIT, y sin perder el histórico.

No hay comentarios

Agregar comentario