Ne avevo bisogno anche io, e con l'aiuto della risposta di Bombe + un po 'di armeggi, l'ho fatto funzionare. Ecco la ricetta:
Importa 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
Dopo # 3 riceverai un messaggio criptico come questo:
Utilizzando un livello superiore di URL: protocol:///path/to/repo/PROJECT => protocol:///path/to/repo
Ignoralo e basta.
Quando corri # 5, potresti avere conflitti. Risolvili aggiungendo file con stato "non unito" e riprendendo rebase. Alla fine, avrai finito; quindi sincronizzare nuovamente il repository SVN, utilizzando dcommit
. È tutto.
Mantenere i repository sincronizzati
Ora puoi sincronizzare da SVN a Git, usando i seguenti comandi:
git svn fetch
git rebase trunk
E per sincronizzare da Git a SVN, utilizzare:
git svn dcommit
Nota finale
Potresti provare questo su una copia locale, prima di fare domanda per un repository live. Puoi fare una copia del tuo repository Git in un posto temporaneo; utilizzare semplicemente cp -r
, poiché tutti i dati si trovano nel repository stesso. È quindi possibile impostare un repository di test basato su file, utilizzando:
svnadmin create /home/name/tmp/test-repo
E controlla una copia funzionante, usando:
svn co file:///home/name/tmp/test-repo svn-working-copy
Ciò ti consentirà di giocare con le cose prima di apportare modifiche permanenti.
Addendum: se sbagli git svn init
Se si esegue accidentalmente git svn init
con l'URL errato e non si è abbastanza intelligenti da eseguire un backup del proprio lavoro (non chiedere ...), non è possibile eseguire nuovamente lo stesso comando. Puoi tuttavia annullare le modifiche emettendo:
rm -rf .git/svn
edit .git/config
E rimuovi la sezione [svn-remote "svn"]
sezione.
È quindi possibile eseguire git svn init
nuovamente.