También necesitaba esto, y con la ayuda de la respuesta de Bombe + algunos retoques, lo hice funcionar. Aquí está la receta:
Importar Git -> Subversion
1. cd /path/to/git/localrepo
2. svn mkdir --parents protocol:///path/to/repo/PROJECT/trunk -m "Importing git repo"
3. git svn init protocol:///path/to/repo/PROJECT -s
4. git svn fetch
5. git rebase origin/trunk
5.1. git status
5.2. git add (conflicted-files)
5.3. git rebase --continue
5.4. (repeat 5.1.)
6. git svn dcommit
Después del n. ° 3, recibirá un mensaje críptico como este:
Usando un mayor nivel de URL: protocol:///path/to/repo/PROJECT => protocol:///path/to/repo
Solo ignora eso.
Cuando se ejecuta # 5, se puede conseguir conflictos. Resuélvalos agregando archivos con el estado "no combinado" y reanudando el rebase. Eventualmente, habrás terminado; luego sincronice nuevamente al repositorio SVN, usando dcommit
. Eso es todo.
Mantener los repositorios sincronizados
Ahora puede sincronizar desde SVN a Git, utilizando los siguientes comandos:
git svn fetch
git rebase trunk
Y para sincronizar de Git a SVN, use:
git svn dcommit
Nota final
Es posible que desee probar esto en una copia local, antes de aplicar a un repositorio en vivo. Puede hacer una copia de su repositorio Git en un lugar temporal; simplemente use cp -r
, ya que todos los datos están en el repositorio mismo. Luego puede configurar un repositorio de pruebas basado en archivos, utilizando:
svnadmin create /home/name/tmp/test-repo
Y verifique una copia de trabajo usando:
svn co file:///home/name/tmp/test-repo svn-working-copy
Eso te permitirá jugar con las cosas antes de hacer cambios duraderos.
Anexo: Si te equivocas git svn init
Si accidentalmente ejecuta git svn init
con la URL incorrecta, y no fue lo suficientemente inteligente como para hacer una copia de seguridad de su trabajo (no pregunte ...), no puede ejecutar el mismo comando nuevamente. Sin embargo, puede deshacer los cambios emitiendo:
rm -rf .git/svn
edit .git/config
Y eliminar la sección [svn-remote "svn"]
sección.
Entonces puedes correr de git svn init
nuevo.