Opierając się na niektórych innych odpowiedziach na to pytanie, wymyśliłem skrypt Ruby, który obsługuje relokację git-svn. Możesz go znaleźć na https://gist.github.com/henderea/6e779b66be3580c9a584 .
Obsługuje relokację bez sprawdzania innej kopii, a nawet obsługuje przypadek, w którym występują niewysłane zmiany w jednej lub kilku gałęziach (ponieważ łamie to zwykłą logikę). Używa rzeczy z odpowiedzi git filter-branch (dla głównej logiki) i odpowiedzi o kopiowaniu gałęzi z jednej instancji repozytorium do drugiej (do kopiowania gałęzi z niezapchniętymi zmianami).
Używałem tego do przenoszenia kilku repozytoriów git-svn, które mam do pracy, a ta wersja skryptu (przeszedłem przez niezliczone iteracje) wydaje się działać dla mnie. Nie jest superszybki, ale wydaje się obsługiwać wszystkie napotkane przypadki i skutkować w pełni przeniesionym repozytorium.
Skrypt daje możliwość utworzenia kopii repozytorium przed wprowadzeniem jakichkolwiek zmian, więc można użyć tej opcji do utworzenia kopii zapasowej. Utworzenie kopii jest wymagane, jeśli masz cofnięte zmiany w jakichkolwiek gałęziach.
Skrypt nie używa żadnych klejnotów ani innych bibliotek, które nie są zawarte w normalnej instalacji MRI Ruby. Używa bibliotek readline i fileutils zawartych w MRI.
Mam nadzieję, że mój skrypt przyda się komuś innemu. Zapraszam do wprowadzania zmian w skrypcie.
UWAGA: Testowałem ten skrypt tylko z git 2.3.0 / 2.3.1 i Ruby 2.2.0 na OS X 10.10 Yosemite (ponieważ jest to środowisko, którego używam), ale spodziewałbym się, że będzie działał również w innych środowiskach. Nie ma jednak gwarancji dotyczących systemu Windows.