Основываясь на некоторых других ответах на этот вопрос, я придумал сценарий Ruby, который обрабатывает перемещение git-svn. Вы можете найти его на https://gist.github.com/henderea/6e779b66be3580c9a584 .
Он обрабатывает перемещение, не проверяя другую копию, и даже обрабатывает случай, когда в одной или нескольких ветвях есть не отправленные изменения (поскольку это нарушает обычную логику). Он использует материал из ответа git filter-branch (для основной логики) и ответ о копировании ветвей из одного экземпляра репо в другой (для копирования ветвей с неопталкиваемыми изменениями).
Я использовал это, чтобы переместить кучу репозиториев git-svn, которые у меня есть для работы, и эта версия скрипта (я прошел через бесчисленное количество итераций), похоже, мне подходит. Это не очень быстро, но похоже, что он справляется со всеми случаями, с которыми я сталкивался, и приводит к полностью перемещенному репо.
Сценарий дает вам возможность создать копию репо перед внесением каких-либо изменений, поэтому вы можете использовать эту опцию для создания резервной копии. Создание копии требуется, если у вас есть неопубликованные изменения в каких-либо ветвях.
Скрипт не использует гемов или других библиотек, не включенных в обычную установку MRI Ruby. Он действительно использует библиотеки readline и fileutils, включенные в MRI.
Надеюсь, мой сценарий окажется полезным для кого-то еще. Не стесняйтесь вносить изменения в сценарий.
ПРИМЕЧАНИЕ. Я тестировал этот сценарий только с git 2.3.0 / 2.3.1 и Ruby 2.2.0 на OS X 10.10 Yosemite (поскольку это среда, которую я использую), но я ожидаю, что он будет работать и в других средах. Однако никаких гарантий насчет Windows.