Close

Conversión a Git: un paso de la migración a Git desde SVN

El próximo paso en la migración de SVN a Git es importar el contenido del repositorio SVN en el repositorio de Git nuevo. Lo haremos con la utilidad git svn que está incluida con la mayoría de las distribuciones de Git, y luego limpiaremos los resultados con svn-migration-scripts.jar*.

Ten en cuenta que el proceso de conversión puede llevar una gran cantidad de tiempo para los repositorios más grandes, incluso cuando clonas un repositorio SVN local. Como referencia, convertir un repositorio de 400 MB con 33.000 confirmaciones en la rama principal tardó unas 12 horas en completarse.

Para los repositorios de un cierto tamaño, los siguientes pasos deberían realizarse en el equipo local del responsable de migración. Sin embargo, si tienes un repositorio SVN muy grande y deseas reducir el tiempo de conversión, puedes ejecutar git svn clone en el servidor SVN en vez de hacerlo en la máquina local del responsable de migración. Esto evita tener que clonar demasiado a través de la red.

* Ten en cuenta que estos guiones se escribieron cuando solo estaba disponible la versión 1.8.x de git. Como tal, se debe usar esa versión de git para que los scripts funcionen.


Clonar el repositorio SVN


El comando git svn clone transforma el tronco (trunk), las ramas y las etiquetas del repositorio SVN en un nuevo repositorio Git. Según cuál sea la estructura tu repositorio SVN, el comando ha de configurarse de otra forma.

Migración a Git: comando git svn clone
bases de datos
Material relacionado

Cómo mover un repositorio de Git completo

Logotipo de Bitbucket
VER LA SOLUCIÓN

Aprende a usar Git con Bitbucket Cloud

Estructuras de SVN estándar

Si tu proyecto SVN usa una estructura de directorio estándar de /trunk, /branches y /tags, se puede usar la opción --stdlayout en vez de especificar de forma manual la estructura del repositorio. Ejecuta el siguiente comando en el directorio ~/GitMigration:

git svn clone --stdlayout --authors-file=authors.txt
 <svn-repo>/<project> <git-repo-name>

Donde es el URI del repositorio SVN que quieres migrar, es el nombre del proyecto que quieres importar y es el nombre de directorio del nuevo repositorio Git.

Por ejemplo, si migraras un proyecto con el nombre Confluence, alojado en https://svn.atlassian.com, podrías ejecutar lo siguiente:

git svn clone --stdlayout --authors-file=authors.txt https://svn.atlassian.com/Confluence ConfluenceAsGit

Estructuras de SVN no estándar

Si tu repositorio SVN no tiene una estructura estándar, debes proporcionar la ubicación del tronco, las ramas y las etiquetas con las opciones de línea de comando --trunk, --branches y --tags. Por ejemplo, si tienes ramas almacenadas en el directorio /branches y el directorio /bugfixes, tendrías que usar el siguiente comando:

git svn clone --trunk=/trunk --branches=/branches 
 --branches=/bugfixes --tags=/tags --authors-file=authors.txt 
 <svn-repo>/<project> <git-repo-name>

Examinar el nuevo repositorio Git


Después de que git svn clone haya terminado (puede tardar un rato), encontrarás un nuevo directorio con el nombre en ~/GitMigration. Este es el repositorio convertido a repositorio de Git. Deberías poder cambiar a y ejecutar cualquiera de los comandos estándar de Git para examinar el proyecto.

Las ramas y las etiquetas, como ya supondrás, no se importan al nuevo repositorio. No habrá ninguna de las ramas de SVN en la salida git branch, como tampoco ninguna etiqueta SVN en la salida git tag. Pero si ejecutas git branch -r, encontrarás todas las ramas y etiquetas del repositorio SVN. El comando git svn clone importa las ramas de SVN como ramas remotas e importa las etiquetas de SVN como ramas remotas introducidas con tags/.

Migración a Git: estructura de repos. Git clonado

Este comportamiento hace que algunos procesos de sincronización bilaterales sean más fáciles, pero puede ser muy confuso al intentar hacer una migración unilateral a Git. Por eso nuestro siguiente paso será convertir estas ramas remotas en ramas locales y etiquetas Git de verdad.

Limpiar el nuevo repositorio Git


El script clean-git incluido en svn-migration-scripts.jar convierte las ramas de SVN en ramas locales de Git y las etiquetas de SVN en etiquetas de Git completas. Ten en cuenta que esta es una operación destructiva y no podrás mover los commits del repositorio Git al repositorio SVN.

Si estás siguiendo esta guía de migración, esto no es un problema, pues recomienda una sincronización unilateral de SVN a Git (el repositorio Git se considera de solo lectura hasta después del paso Migrar). Sin embargo, si planificas hacer un commit en el repositorio Git y el repositorio SVN durante el proceso de migración, no debes ejecutar los siguientes comandos. Esta es una tarea avanzada, y no se recomienda usarla en un proyecto normal.

Para ver lo que se puede limpiar, ejecuta el siguiente comando en ~/GitMigration/:

java -Dfile.encoding=utf-8 -jar ~/svn-migration-scripts.jar clean-git

Esto dará como resultado todos los cambios que el script desea hacer, pero en realidad no hará ninguno. Para ejecutar esos cambios, has de usar la opción --force , tal que si:

java -Dfile.encoding=utf-8 -jar ~/svn-migration-scripts.jar clean-git --force

Ahora deberías ver todas las ramas de SVN en la salida git branch junto con las etiquetas SVN en la salida git tag. Esto significa que has convertido correctamente el proyecto de SVN en un repositorio Git.

Resumen


En este paso, has convertido el repositorio SVN en un nuevo repositorio Git con el comando git svn clone, luego has limpiado la estructura del repositorio resultante con svn-migration-scripts.jar. En el siguiente paso, tendrás que aprender a cómo mantener este nuevo repositorio Git sincronizado con cualquier nuevo commit del repositorio SVN. Este será un proceso similar a la conversión, pero hay algunas consideraciones importantes del workflow durante este período de transición.


Compartir este artículo
Tema siguiente

Lecturas recomendadas

Consulta estos recursos para conocer los tipos de equipos de DevOps o para estar al tanto de las novedades sobre DevOps en Atlassian.

Gente que colabora utilizando un muro lleno de herramientas

Blog de Bitbucket

Ilustración de Devops

Ruta de aprendizaje de DevOps

Demostraciones de funciones con expertos de Atlassian del Centro de demostraciones

Cómo funciona Bitbucket Cloud con Atlassian Open DevOps

Suscríbete para recibir el boletín de DevOps

Thank you for signing up