Sulla base di alcune delle altre risposte a questa domanda, ho escogitato uno script Ruby che gestisce il trasferimento di git-svn. Puoi trovarlo su https://gist.github.com/henderea/6e779b66be3580c9a584 .
Gestisce il trasferimento senza estrarne un'altra copia e gestisce anche il caso in cui sono presenti modifiche non inviate in uno o più rami (poiché ciò interrompe la logica normale). Usa cose dalla risposta git filter-branch (per la logica principale) e la risposta sulla copia di rami da un'istanza del repository a un'altra (per copiare rami con modifiche non inviate).
L'ho usato per riposizionare un gruppo di repository git-svn che ho per lavoro, e questa versione dello script (ho passato innumerevoli iterazioni) sembra funzionare per me. Non è super veloce, ma sembra che gestisca tutti i casi che ho riscontrato e si traduca in un repository completamente riposizionato.
Lo script offre la possibilità di creare una copia del repository prima di apportare modifiche, quindi è possibile utilizzare questa opzione per creare un backup. La creazione di una copia è necessaria se sono presenti modifiche non inviate in qualsiasi ramo.
Lo script non utilizza gemme o altre librerie non incluse nella normale installazione di MRI Ruby. Utilizza le librerie readline e fileutils incluse in MRI.
Spero che il mio script si riveli utile a qualcun altro. Sentiti libero di apportare modifiche allo script.
NOTA: Ho testato questo script solo con git 2.3.0 / 2.3.1 e Ruby 2.2.0 su OS X 10.10 Yosemite (poiché è l'ambiente che uso), ma mi aspetto che funzioni anche su altri ambienti. Nessuna garanzia su Windows, però.