Synchronize Git repositories
Es muy fácil sincronizar tu repositorio Git con los nuevos commits del repositorio SVN original. Esto conduce a un período de transición cómodo durante el proceso de migración en el que puedes continuar usando tu workflow de SVN existente, pero comenzar a experimentar con Git.
Se puede sincronizar en ambas direcciones. Sin embargo, te recomendamos que hagas una sincronización unilateral de SVN a Git. Durante el período de transición, solo debes hacer commits en tu repositorio SVN, no en el repositorio Git. Cuando estés seguro de que tu equipo está listo para hacer el cambio, puedes finalizar el proceso de migración y comenzar a hacer commit de los cambios con Git en vez de con SVN.
Mientras tanto, deberías continuar haciendo commits en tu repositorio SVN y sincronizarlo con el repositorio Git siempre que sea necesario. Este proceso es parecido a la fase Convertir, pero dado que solo enfrentas cambios incrementales, debería ser mucho más eficiente.
Actualizar el archivo de autores
El archivo authors.txt
que usamos para mapear los nombres de usuario de SVN a nombres completos y direcciones de correo electrónico es esencial en el proceso de sincronización. Si los has movido de la ubicación ~/GitMigration/authors.txt
que veníamos usando hasta el momento, debes actualizar la ubicación con:
git config svn.authorsfile
Si nuevos desarrolladores han hecho commits en el repositorio SVN desde la última sincronización (o desde la clonación inicial), el archivo de autores debe actualizarse respectivamente. Puedes hacerlo de forma manual agregando los nuevos usuarios a authors.txt
o puedes usar la opción --authors-prog,
como se describe en la siguiente sección.
Para las sincronizaciones excepcionales, generalmente es más fácil editar directamente el archivo de autores; no obstante, se prefiere la opción ---authors-prog
si vas a realizar sincronizaciones sin supervisión (es decir, en una tarea programada).
Material relacionado
Cómo mover un repositorio de Git completo
VER LA SOLUCIÓN
Aprende a usar Git con Bitbucket Cloud
Generación automática de autores de Git
Si el archivo de autores no debe actualizarse, puedes saltear esta sección.
El comando git svn
incluye una opción llamada --authors-prog
que apunta a un script que transforma de manera automática los nombres de usuario de SVN en autores de Git. Deberás configurar este script para aceptar el nombre de usuario de SVN como su único argumento y devolver una línea simple en la forma de Nombre
(como el lado derecho del archivo de autores existente). Esta opción puede ser muy útil si debes sumar de forma regular nuevos desarrolladores a tu proyecto.
Si deseas usar la opción --authors-prog,
crea un archivo llamado authors.sh
en ~/GitMigration
. Agrega la siguiente línea a authors.sh
para obtener un nombre y correo electrónico de Git ficticios para cualquier autor que no se encuentre en authors.txt
:
echo "$1 <$1@example.com>"
Como ya dijimos, esto solo generará un nombre y un correo electrónico ficticios según el nombre de usuario de SVN, por lo que puedes modificarlo si puedes proporcionar un mapeo con más sentido.
Capturar los nuevos commits de SVN
A diferencia de SVN, Git hace una distinción entre descargar commits ascendentes e integrarlos en el proyecto. Lo primero se denomina "captura", mientras que lo segundo puede hacerse a través de un merge o una reasignación. En el directorio ~/GitMigration,
ejecuta el siguiente comando para capturar cualquier nuevo commit del repositorio SVN original.
git svn fetch
Este es parecido al comando git svn clone
de la fase anterior en que solo actualiza las ramas remotas del repositorio Git, las ramas locales no reflejarán ninguna de las actualizaciones todavía. Tu ramas remotas, por otro lado, deben coincidir de manera exacta con la historia del repositorio SVN.
Si estás usando la opción --authors-prog,
debes incluirla en el comando anterior, de la siguiente manera:
git svn fetch --authors-prog=authors.sh
Sincronizar con los commits capturados
Para aplicar los commits descargados al repositorio, ejecuta el siguiente comando:
java -Dfile.encoding=utf-8 -jar ~/svn-migration-scripts.jar sync-rebase
Esto reasignará los commits capturados a las ramas locales para que coincidan con sus equivalentes remotos. Ahora deberías poder ver los nuevos commits en la salida git log.
Limpiar el repositorio de Git (nuevamente)
También es una buena idea ejecutar el script git-clean
de nuevo para eliminar cualquier etiqueta o rama obsoletas que se borraron del repositorio SVN original desde la última sincronización:
java -Dfile.encoding=utf-8 -jar ~/svn-migration-scripts.jar clean-git --force
Tu repositorio Git local ahora debería estar sincronizado con tu repositorio SVN.
Resumen
Durante este período de transición, es muy importante que tus desarrolladores solo hagan commit en el repositorio SVN original. De la única forma en que debe actualizarse el repositorio Git es a través del proceso de sincronización explicado antes. Es mucho más fácil que gestionar un workflow de sincronización bilateral, pero aún te permite comenzar a integrar Git en tu proceso de build.
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.