Миграция репо не всегда с использованием структуры соединительных линий / тегов из SVN в GIT - PullRequest
4 голосов
/ 26 сентября 2011

Я ищу способ навсегда (т. Е. После импорта git-svn не будет использоваться, а репо будет снова клонирован, чтобы избавиться от всех остатков git-svn), чтобы перенести один из моих SVN-репозиториев в git.Обычно это было бы легко - просто выполнить шаги, описанные в http://www.jonmaddox.com/2008/03/05/cleanly-migrate-your-subversion-repository-to-a-git-repository/.

Однако в репозитории SVN я через некоторое время переключился на структуру trunk / branch / tags, так что примерно половина из ~ 2000коммиты работают с фактическим транком, находящимся в /, в то время как другая половина имеет его в / trunk / (то есть один большой коммит перемещает все), поэтому ни использование -s, ни его использование при выполнении инициализации git svn не будет работать должным образом.1005 *

Сейчас я ищу способ импортировать репозиторий в git правильно, то есть сохранить информацию о ветвях (без тегов, я их никогда не создавал), не испуская старые коммиты.В случае, если это невозможно, я хотел бы знать, есть ли способ переписать старые коммиты, чтобы изменить репо, чтобы он использовал структуру trunk / branch / tags - тогда я мог бы просто использовать -s в git-svn.

1 Ответ

2 голосов
/ 28 сентября 2011

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 без каких-либо проблем.

...