Configurar en Git un repositorio remoto Subversion

Hay varios motivos por los cuales podrías querer traer la información de un repositorio de código, versionado con Subversion, a tu repositorio de código versionado con Git, desde sincronizar ambos repositorios durante un periodo de transición de gestor de versiones hasta, simplemente, aprovechar las características de git para la gestión de ramas antes de subir nuevo código al repositorio de Subversion. Estos motivos son los que justifican la existencia de git-svn, una característica de Git que nos proporciona comandos para gestionar un flujo bidireccional entre Git y Subversion.

Lo más común es tirar de todo el árbol de Subversion con el siguiente comando:

$ git svn clone https://miRepositorio.com/repositorios/projecto -T trunk -b branches -t tags

Pero lo que te quiero mostrar es como puedes hacer cuando no quieres traer toda la información, sino que quieres traer y trabajar únicamente con una rama del repositorio Subversion. Para ello, debes saber que Git almacena una lista de los repositorios remotos en el archivo .git/config, incluyendo aquellos que has configurado con el comando que te acabo de mostrar arriba, y puedes verlos, una vez que has usado el comando fetch, usando este otro comando que muestras todas tus ramas, tanto locales como remotas.

$ git branch -a

Sabiendo esto, puedes deducir que añadiendo la configuración que nos interesa en dicho archivo, podremos gestionar, desde git, la rama que nos interesa del repositorio Subversion sin tener que hacerle seguimiento a todas. Abajo te muestro un ejemplo para configurar la rama entregas, pero ten en cuenta que la URL que tú necesites dependerá de la estructura de tu repositorio Subversion.

[svn-remote "entregas"]
  url = https://miRepositorioSubversion.com/repositorios/projecto/ramas/entregas
  fetch = :refs/remotes/subversion/entregas

Con esto añades a Git una configuración para gestionar una rama de un repositorio remoto Subversion, con un referencia, entregas, sobre la que poder usar el comando git svn fetch.

$ git svn fetch entregas

Si vuelves a comprobar la lista de ramas con git branch -a deberías ver algo similar esto:

$ git branch -a
  master
  netlify
* writting
  remotes/gitlab/master
  remotes/gitlab/netlify
  remotes/gitlab/writting
  remote/subversion/entregas

¡Observa que nuestra nueva rama remota está en la última línea de la salida del comando!