TL, DR: можно исправить починенное хранилище, подобное описанному в вопросе, когда допустима некоторая ручная работа. Самый простой способ - сделать это с помощью файла дампа SVN, а затем просто импортировать его, используя git-svn с опцией stdlayout .
Мне удалось сделать это, переписав svndump репозитория, чтобы включить правильную структуру с самого начала:
svnadmin dump orig/ --incremental > repo.svndump
Затем я использовал небольшой встроенный скрипт Perl для изменения папок:
perl -pe 's/^Node-path: (?!trunk|branches|tags)(.+)$/Node-path: trunk\/$1/g' repo.svndump > repo2.svndump
Поскольку дамп стал недействительным - необходимо было создать папку trunk
в r0, а фиксацию, перемещающую все из /
в /trunk
, необходимо стереть - я отредактировал файл дампа вручную (к счастью, все метаданные открытым текстом) и добавил следующее в начале изменений для r0:
Node-path: trunk
Node-kind: dir
Node-action: add
Prop-content-length: 10
Content-length: 10
PROPS-END
В коммите, перемещающем все файлы, я удалил все действия и добавил следующее, чтобы создать папку branches
(аналогично для папки tags
, если я ее использовал)
Node-path: branches
Node-kind: dir
Node-action: add
Prop-content-length: 10
Content-length: 10
PROPS-END
Отредактированный дамп-файл теперь может быть загружен с использованием svnadmin load
, что дает мне хранилище, которое может быть импортировано git-svn без каких-либо проблем.