Eu também precisava disso, e com a ajuda da resposta de Bombe + algumas brincadeiras, consegui que funcionasse. Aqui está a receita:
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
Após o nº 3, você receberá uma mensagem enigmática como esta:
Usando um nível mais alto de URL: protocol:///path/to/repo/PROJECT => protocol:///path/to/repo
Apenas ignore isso.
Quando você executa o número 5, pode ter conflitos. Resolva-os adicionando arquivos com o estado "não imerso" e retomando a rebase. Eventualmente, você estará pronto; sincronize novamente com o repositório SVN, usandodcommit
. Isso é tudo.
Mantendo repositórios sincronizados
Agora você pode sincronizar do SVN para o Git, usando os seguintes comandos:
git svn fetch
git rebase trunk
E para sincronizar do Git para o SVN, use:
git svn dcommit
Nota final
Você pode tentar isso em uma cópia local, antes de aplicar em um repositório ativo. Você pode fazer uma cópia do seu repositório Git para um local temporário; basta usar cp -r
, pois todos os dados estão no próprio repositório. Em seguida, você pode configurar um repositório de teste baseado em arquivo usando:
svnadmin create /home/name/tmp/test-repo
E verifique uma cópia de trabalho usando:
svn co file:///home/name/tmp/test-repo svn-working-copy
Isso permitirá que você brinque com as coisas antes de fazer alterações duradouras.
Adendo: Se você errar git svn init
Se você executar acidentalmente git svn init
com o URL errado e não for inteligente o suficiente para fazer um backup do seu trabalho (não pergunte ...), não poderá simplesmente executar o mesmo comando novamente. No entanto, você pode desfazer as alterações emitindo:
rm -rf .git/svn
edit .git/config
E remova a seção de [svn-remote "svn"]
seção.
Você pode executar git svn init
novamente.