Основываясь на некоторых других ответах на этот вопрос, я придумал скрипт 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.