Предварительная фиксация в корневом каталоге репозитория Git / экспорт Git в Subversion - PullRequest
3 голосов
/ 14 сентября 2009

Я хочу экспортировать Git-репозиторий ( G ) в SVN-репозиторий ( S ). S был инициализирован со стандартной компоновкой (ветки / теги / ствол), а G имеет историю разработки. Я следовал совету в блоге открытого исходного кода Google , в котором подробно описывается, как работает экспорт G S . В основном блог рекомендует git-svn clone S в пустой каталог, извлекать G в темп. ветвь и перебазирование , чтобы «освоить», став таким образом вторым Git-хранилищем ( G ').

Я не хочу отказываться ни от файлов, не находящихся под контролем исходного кода, ни от ветвей, недоступных в источнике. Вот почему я не хочу продолжать работать с G ', а с G . Есть ли способ получить обратно новый коммит, представляющий коммит макета, в S ? У меня не было успеха в попытке объединить G ' в G (конечно, без общего происхождения).

Ответы [ 2 ]

3 голосов
/ 15 сентября 2009

Вы должны иметь возможность объединить G ' и G , используя git merge --strategy=ours, то есть, игнорируя происхождение и создавая коммит, который использует дерево G' но, кажется, оба коммитов являются родителями. Результат будет немного уродливым, поскольку история будет содержать две копии каждого коммита, но вы сможете продолжить работу над G без проблем.

2 голосов
/ 22 сентября 2009

Я не уверен, есть ли более простой способ добавить начальный коммит, но есть довольно простой способ заставить его выглядеть так, как если бы компоновка SVN была там с самого начала.

Вы можете использовать git filter-branch для перезаписи истории, чтобы каждый файл существовал в SVN-каталоге "trunk", начиная с первого коммита:

git filter-branch --tree-filter 'mkdir trunk; git ls-files | xargs -I {} mv {} trunk'

Вы также можете перемещать файлы в каталоги тегов и ветвей, если хотите, но то, как вы решите, какие файлы перемещать туда, будет полностью зависеть от того, для чего предназначены ветви, или когда вы хотите добавить теги в историю.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...