Mapeo de usuarios Subversion y Git
Lo primero que debemos hacer es crear un fichero para mapear los usuarios de Subversion con los usuarios que vamos a tener en Git. En Subversion los usuarios se definen con un nombre de usuario pero en Git debemos definir un nombre y una dirección de correo.
Nuestro fichero debe tener el siguiente formato:
usuario-svn-1 = Javier Montesinos <fj.montesinos@gmail.com> usuario-svn-2 = Nombre Apellidos <nombre.apellidos@gmail.com>De tal forma que debemos añadir tantos usuarios de Subversion al fichero de mapeo como usuarios hayan realizado commits en los proyectos que deseamos migrar a Git. De todos modos no te preocupes porque Git te avisará si al realizar la importación encuentra un usuario que no está en el fichero de mapeo, lo añades y volverías a ejecutar el proceso de importación.
Una vez tenemos el fichero usuarios-svn.txt finalizado y ubicado por ejemplo en la siguiente ruta /git-learning/common/users-svn.txt lo siguiente que tenemos que realizar es importar el proyecto de Subversion a Git
Importar proyecto de Subversion a Git
Supongamos que tenemos un proyecto padre con el nombre Mi Aplicación que consta de dos módulos la parte web, mi-aplicacion-wm y el modelo, mi-aplicacion-model-jm donde tenemos definido servicios, dominio, capa de acceso a datos para que en el caso de necesitar realizar una capa de servicios REST tan solo debamos implementar la parte REST mediante mi-aplicacion-restm.
Además tenemos en Subversion lo siguiente:
mi-aplicacion-wm → http://svn.montesinos.org.es/trunk/mi-aplicacion-wm
mi-aplicacion-model-jm → http://svn.montesinos.org.es/trunk/mi-aplicacion-model-jm
Para importar mi-aplicacion-wm desde consola ejecutaremos lo siguiente:
$ git svn clone http://svn.montesinos.com/trunk/mi-aplicacion-wm \ --authors-file=/git-learning/common/users-svn.txt \ --no-metadata mi-carpeta-aplicacion-wmMediante el atributo --no-metada evitaremos que git nos añada información a cada uno de los commit como la que se muestra a continuación y nos quedaría con el mensaje del commit limpio:
git-svn-id: http://svn.montesinos.com/trunk/mi-aplicacion-wm@94 4c93b258-373f-11de-be05-5f7a86268029
El atributo mi-carpeta-aplicacion-wm indica la carpeta en la cual queremos que se realice la importación, así pues si por ejemplo ejecutamos el comando git svn desde /git-learning/projects/mi-aplicacion se creará la carpeta /git-learning/projects/mi-aplicacion/mi-carpeta-aplicacion-wm y en esta tendremos finalmente nuestro código procedente de Subversion y la carpeta .git con toda la información de los commits relacionados con el proyecto procedentes de Subversion.
Para realizar lo mismo con mi-aplicacion-model-jm ejecutaríamos:
$ git svn clone http://svn.montesinos.com/trunk/mi-aplicacion-model-jm \ --authors-file=/git-learning/common/users-svn.txt \ --no-metadata mi-aplicacion-model-jm
Publicar los cambios en un repositorio remoto
Para publicar el código en un repositorio remoto tenemos diferentes opciones Github, Bitbucket... pero si queremos que nuestro código resida en nuestros servidores de forma algo más "privada" podemos optar por una solución como GitLab tremendamente sencilla de utilizar y configurar y mediante la stack de Bitnami rapidísima de echar a rodar.
Desde Gitlab crearemos 2 proyectos: mi-aplicacion-wm y mi-aplicacion-model-jm cuyas urls serán por ejemplo:
mi-aplicacion-wm → http://gitlab.montesinos.org.es/javier-montesinos/mi-aplicacion-wm.git
mi-aplicacion-model-jm → http://gitlab.montesinos.org.es/javier-montesinos/mi-aplicacion-model-jm.git
Tan solo nos queda pues hacer push de nuestro código a los repositorios remotos. Para mi-aplicacion-wm, desde la carpeta ../mi-aplicacion/mi-aplicacion-wm publicamos en el repositorio remoto ejecutando lo siguiente:
$ git remote add origin \ http://gitlab.montesinos.org.es/javier-montesinos/mi-aplicacion-wm.git $ git push -u origin masterPara mi-aplicacion-model-jm y desde ../mi-aplicacion/mi-aplicacion-model-jm ejecutamos:
$ git remote add origin \ http://gitlab.montesinos.org.es/javier-montesinos/mi-aplicacion-model-jm.git $ git push -u origin masterEl siguiente paso será integrar ambos proyectos en un único repositorio, pero esto es harina de la siguiente entrada.
Referencias
Entrada en formato pdf: Git Svn - Importar de Subversion a Git
Libro Pro Git - Capítulo 8 - Git y Subversion
Saludos.
P.D. Como siempre espero que pueda ser útil.
Siguiente entrada publicada -> Git - Merge de dos repositorios en uno
Una cosa que he descubierto.
ResponderEliminarSi nos interera obtener el código de Subversion desde una revisión concreta no tendremos más que usar los parámetros -rN:HEAD justo después del clone. Donde N será la revisión desde la que deseamos importar nuestro repositiorio.
Así pues para importar desde la revisión 100 por ejemplo usaríamos:
git svn clone -r100:HEAD ....
Buenísimo Javier justo lo que andaba buscando
ResponderEliminarMe alegro que te pueda ser útil Milton.
ResponderEliminarUna cosa que se nos ha dado realizando importaciones en otros equipos. Si necesitásemos especificar el usuario de Subversion para realizar la importación habría que añadir lo siguiente --username=usuario-svn después de clone de modo que nos quedaría:
$ git svn clone --username=miusuario-svn ....