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 usuariouser
es miembro del gruporepo
.El acceso a Subversion y Git se logra vía
ssh
con credenciales de usuariouser
.
el proceso que seguí fue:
- 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
Verifiqué que los contenidos de
~/code.git
lucían razonables usandogit log
,gitk
ygiggle
. En particular, que los nombres de los autores fueron transformados adecuadamente.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
- 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
- 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