Migración_svn_a_git

Anuncio
Migración SVN a Git
En ocasiones los equipos empiezan a desarrollar código y utilizan para la gestión del
código SVN ya que es lo que se ha venido utilizando desde hace tiempo. Con la
aparición de Git esto ha cambiado, puesto que Git entre otras características permite
realizar commits offline.
Figura X: Git y Subversion.
Ahora comentaré las ventajas de uno y otro sistema de control de versiones.
Git ha convertido en el estándar de la industria en el desarrollo web, se prefiere a
diferencia de SVN porque:




Git se distribuye.
Git es más rápido.
Git tiene un tamaño más pequeño por repositorio.
Generar ramas y trabajar con los equipos es más fácil.
SVN ha sido utilizado por más tiempo, hay herramientas de interfaz de usuario más
gráfica, si se quiere evitar la línea de comandos. Hay, sin embargo, un montón de
herramientas de Git, así que esto no debería ser un gran motivo de ruptura.
SVN es un sistema de control de versiones centralizado, todo se almacena en un solo
lugar. Esto puede hacer que algunos piensan que SVN es menos confuso que Git.
En nuestro caso nos decidimos por Git después de tener el repositorio de código en
SVN porque:





Git es mucho más rápido que Subversion
SVN requiere 30 veces más el espacio en disco para almacenar el mismo
historial.
Las ramas Git son más simples que en Subversion.
Las ramas Git llevan toda su historia completa
GitHub provee una comunidad entorno a Git muy grande y con muchas
características interesantes.
Nosotros hemos utilizado para realizar la migración Subgit, que es una herramienta
que mantiene sincronizados dos repositorios de SVN y Git, de tal modo que cuando se
hace un cambio en alguno de estos dos repositorios, SubGit replica el cambio en el
otro repositorio. Su propósito es proporcionar un camino de migración gradual de SVN
a Git, ya que permitiría que gradualmente los desarrolladores vayan usando
funcionalidad de Git cada uno a su ritmo, pudiendo algunos estar ya trabajando
completamente sobre Git mientras que otros continúan trabajando contra el
repositorio de SVN.
Figura X: Ciclo de vida con la herramienta Subgit.
La potencia de Subgit reside en la capacidad de adaptación que tiene para migrar
cualquier repositorio SVN a Git. Para ello nos brinda una serie de archivos de
configuración que paso a comentar.
repositorio_git/subgit/config: en este archivo tenemos la URL del repositorio SVN
así como el mapeo que se va a realizar entre las ramas que existen en SVN y Git.
Además contiene una referencia al archivo donde se encuentra el nombre de los
autores de los commits en SVN.
[core]
authorsFile = subgit/authors.txt
pathEncoding = UTF-8
defaultDomain = tmatesoft.com
[svn]
url = http://egc-frontend-resultados.googlecode.com/svn/
trunk = trunk:refs/heads/master
branches = branches/*:refs/heads/*
tags = tags/*:refs/tags/*
shelves = shelves/*:refs/shelves/*
fetchInterval = 60
connectTimeout = 30
readTimeout = 60
auth = default
[auth "default"]
passwords = subgit/passwd
useDefaultSubversionConfigurationDirectory = false
subversionConfigurationDirectory = /home/user/subversion
repositorio_git/subgit/authors.txt: es donde se encuentran los
autores de los
commits en SVN, y que es necesario si queremos hacer una migración consistente
entre los sistemas gestores de versiones.
Los pasos seguidos han sido los siguientes:
En primer lugar nos descargamos de la página de Atlassian
(https://bitbucket.org/atlassian/svn-migration-scripts/downloads/svn-migrationscripts.jar) es herramienta que tiene empaquetado un script para generar el archivo
authors.txt y que realiza el mapeo entre los autores de SVN y Git.
Un punto fuerte de este script es que no tienes porque tener el repositorio SVN en
local ya que accede de manera remota y extrae los autores.
Una vez la tenemos descargada procedemos a su verificación para ver que es
consistente.
java -jar svn-migration-scripts.jar verify
Figura X: Resultado de ejecutar la verificación
Después ejecutamos el script para generar los autores.
java -jar svn-migration-scripts.jar authors http://egc-frontendresultados.googlecode.com/svn/ > authors.txt
Figura X: Resultado de ejecutar el script de creación de autores
En la carpeta de destino deberíamos tener un fichero llamado authors.txt con el
mapeo.
Figura X: Fichero authors.txt generado
También existe una instrucción que nos saca de nuestro repositorio SVN los autores de
los commits, el pega es que debemos tener ese repositorio SVN en local.
svn log --xml | grep author | sort -u |
perl -pe 's/.*>(.*?)<.*/$1 = /'
El siguiente paso fue lanzar el script que no permite importar nuestro repositorio SVN
en la nube a nuestro repositorio Git local. Para ello utilizamos el siguiente comando:
subgit import --non-interactive --svn-url http://egc-frontendresultados.googlecode.com/svn/ egcFrontend.git
Acto seguido nos aparece en pantalla el progreso.
Figura X: Resultado de ejecutar subgit import (progreso)
Al finalizar la importación a nuestro repositorio local de Git, la consola nos mostrar una
pequeña información sobre cómo ha ido el proceso.
Figura X: Resultado de ejecutar subgit import
Siempre es bueno comprobar que nuestro repositorio contiene la misma información y
que no se ha perdido nada en el proceso.
Utilizaremos git
están las ramas.
log –oneline para mostrar los commits y git branch para ver que
Figura X: Resultado de ejecutar git log --oneline
Figura X: Resultado de ejecutar git branch
El proceso no ha finalizado puesto que el repositorio SVN migrado está en nuestro
repositorio local Git pero a fin de que esta información sea compartida la subiremos al
repositorio remoto que hay en GitHub.
Para ello creamos un repositorio en GitHub y los siguiente que haremos será ejecutar
el siguiente comando:
git remote add origin https://github.com/alvfergar/migracionFrontend.git
Figura X: Resultado de vincular el repositorio local al remoto
Lo lógico después de realizar este vínculo es realizar un push a fin de la migración
llegue a un punto accesible por los demás usuario, en nuestro caso el repositorio en
GitHub. Lanzamos el siguiente comando:
git push –u origin master
Figura X: Resultado de ejecutar git push
Cuando finaliza el proceso la consola mostrará
Figura X: Finalización de la ejecución de git push
Ahora podemos ir a la página de GitHub ya que los cambios se ven de manera mucho
más atractiva.
Figura X: Repositorio migracionFrontend en GitHub
Para ver que el histórico de commits se ha importado correctamente y junto con sus
autores. Pulsamos sobre la pestaña commits y nos sale la información asociada a los
commits de nuestro proyecto migrado.
Figura X: Muestra de los commits en GitHub
Ejercicio 1 Migración rápida y sin necesidad de ordenador de un proyecto en
SVN a Git.
Nuestro Jefe nos pide que realicemos una migración de un repositorio SVN a Git. Nos
comenta que lo necesita para dentro de 10 minutos ya que es el plazo máximo para
poder llevarles a los accionistas una versión preliminar en desarrollo. No sería
complicado de hacer salvo porque no estamos ante un ordenador.
Resolución
Una solución rápida para este problema es utilizar el navegador web de nuestro móvil,
entrar en la página de GitHub y habilitamos la versión de escritorio de la página web y
creamos un repositorio vacío.
En nuestro caso se llamará migracionSVN-GIT.
Figura X: Creación de un repositorio en GitHub
Pulsamos sobre el último botón que dice “Import code” y nos dirigirá a la siguiente
pantalla. En la cual introducimos la URL del repositorio SVN.
Figura X: Proceso de migración en GitHub, añadiendo URL SVN
Pulsamos sobre “Begin Import” y comienza la migración.
Figura X: Proceso de migración en GitHub, progreso.
Una vez finalizada la migración nos saldrá algo así, pulsamos sobre “Continue to
repository”.
Figura X: Finalización del proceso de migración en GitHub
Entramos en nuestro repositorio migracionSVN-GIT y podemos ver que nuestro
proyecto está migrado. La única pega es que solo guarda los commits referidos a
creación de branches o merges. Tampoco guarda a los autores de los cambios como
contributores.
Figura X: Repositorio migracionSVN-GIT en GitHub
Vemos los commits que se han realizado y su información.
Figura X: Muestra los commits migrados desde SVN a GitHub
Para finalizar le mandamos a nuestro Jefe un correo donde le damos la URL del
repositorio en GitHub para que pueda hacer la presentación.
Bibliografía
https://blog.infranetworking.com/subversion-vs-git/
http://www.javahispano.org/portada/2012/7/17/subgit-migracion-gradual-de-svn-agit.html
http://git-scm.com/book/en/v2/Git-and-Other-Systems-Migrating-to-Git
https://gist.github.com/leftclickben/322b7a3042cbe97ed2af
https://www.atlassian.com/git/tutorials/migrating-overview/
http://www.subgit.com/documentation.html
Descargar