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.
Material relacionado
Cómo mover un repositorio de Git completo
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/
.
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.