De Subversion a Git

Posted on 2020-03-09 by Ernesto Hernández-Novich
Tags: , ,

Me encontré en la necesidad de migrar varios repositorios Subversion a nuevos repositorios Git. La migración necesitaba conservar los nombres de los autores de la mejor manera posible.

Siendo:

  • svn.example.com el servidor con repositorio Subversion a migrar.

  • git.example.com el servidor donde quedarán los repositorios Git.

  • El trabajo se hace con el usuario Linux user local.

  • Los miembros del grupo Linux repo necesitan acceso al repositorio final. El usuario user es miembro del grupo repo.

  • El acceso a Subversion y Git se logra vía ssh con credenciales de usuario user.

el proceso que seguí fue:

  1. Trabajando en la máquina local, usar git para clonar el repositorio Subversion en un repositorio Git local nuevo.
$ git svn clone \
          svn+ssh://svn.example.com/var/lib/svn/repo \
          -A authors-transform.txt \
          repo.git
  1. Verifiqué que los contenidos de ~/code.git lucían razonables usando git log, gitk y giggle. En particular, que los nombres de los autores fueron transformados adecuadamente.

  2. Trabajando en git.example.com, preparé un repositorio Git vacío y le puse permisos

$ cd /var/lib/git
$ git init --bare repo.git
$ chown -R root.repo repo.git
$ find repo.git -type d -print0 | xargs -0 chmod 2770
  1. Trabajando en la máquina local, modificar el origen del repositorio Git para apuntar al creado en el paso anterior, y empujar los cambios.
$ cd repo.git
$ git remote add origin user@git.example.com:/var/lib/svn/repo.git
$ git config branch.master.remote origin
$ git config branch.master.merge refs/heads/master
$ git push --all
  1. Intentar clonar en otra ubicación, esta vez usando el nuevo repositorio Git central. Verificar el flujo de trabajo Git habitual (change, commit, y push).
$ cd /some/where/else
$ git clone user@git.example.com:/var/lib/git/repo.git repo
$ cd repo
(make changes)
$ git commit -a
$ git push --all