Basierend auf einigen anderen Antworten auf diese Frage habe ich ein Ruby-Skript entwickelt, das das Verschieben von git-svn behandelt. Sie finden es unter https://gist.github.com/henderea/6e779b66be3580c9a584 .
Es behandelt das Verschieben, ohne eine andere Kopie auszuchecken, und es behandelt sogar den Fall, dass es in einem oder mehreren Zweigen nicht gedrückte Änderungen gibt (da dies die reguläre Logik verletzt). Es werden Inhalte aus der Git-Filter-Zweig-Antwort (für die Hauptlogik) und der Antwort zum Kopieren von Zweigen von einer Instanz des Repos in eine andere (zum Kopieren von Zweigen mit nicht übertragenen Änderungen) verwendet.
Ich habe dies verwendet, um eine Reihe von Git-SVN-Repos zu verschieben, die ich für die Arbeit habe, und diese Version des Skripts (ich habe unzählige Iterationen durchlaufen) scheint für mich zu funktionieren. Es ist nicht superschnell, aber es scheint alle Fälle zu behandeln, auf die ich gestoßen bin, und führt zu einem vollständig verlagerten Repo.
Das Skript bietet Ihnen die Möglichkeit, eine Kopie des Repos zu erstellen, bevor Sie Änderungen vornehmen. Mit dieser Option können Sie ein Backup erstellen. Das Erstellen einer Kopie ist erforderlich, wenn Sie Änderungen in einem Zweig nicht verschoben haben.
Das Skript verwendet keine Edelsteine oder andere Bibliotheken, die nicht in der normalen MRI Ruby-Installation enthalten sind. Es werden die in der MRT enthaltenen Bibliotheken readline und fileutils verwendet.
Hoffentlich wird sich mein Skript für jemand anderen als nützlich erweisen. Fühlen Sie sich frei, Änderungen am Skript vorzunehmen.
HINWEIS: Ich habe dieses Skript nur mit Git 2.3.0 / 2.3.1 und Ruby 2.2.0 unter OS X 10.10 Yosemite getestet (da dies die von mir verwendete Umgebung ist), aber ich würde erwarten, dass es auch in anderen Umgebungen funktioniert. Keine Garantie für Windows.