Импорт репозитория SVN в СУЩЕСТВУЮЩИЙ репозиторий Git в качестве ветки

В настоящее время у меня есть проект в коде Google, который я хотел бы включить в проект на Github.

Проблема в том, что проект SVN — это, по сути, просто папка более крупного проекта на github, поэтому я не думаю, что могу просто использовать для этого git-svn.

Я предполагаю, что могу использовать git svn для клонирования проекта, но тогда я не уверен, как правильно привить проект svn к существующему проекту git.

Желаемым результатом было бы получить историю SVN в ветке Git (а не прививать ее к мастеру).

Возможность dcommit обратно в svn на самом деле не нужна (если это поможет).

РЕШЕНО

В итоге я использовал предложение just_doug, но с небольшими изменениями:

1: я использовал предложения из http://ivanz.com/2009/01/15/selective-import-of-svn-branches-into-a-gitgit-svn-repository/, чтобы добавить googlecode в качестве удаленной ссылки

2: я создаю новую ветку от мастера для удаленной ветки, которую я хотел

3: я использовал

git merge -s ours --no-commit googlecode-remote

объединить два

4: я тогда использовал

git read-tree --prefix=folder1/folder2/ -u googlecode-remote

чтобы прочитать историю слияния и перебазировать в нужную подпапку

надеюсь, это поможет кому-то в подобной ситуации;)


person Alex B.    schedule 31.03.2011    source источник


Ответы (1)


Я не использовал его раньше, но похоже, что вы хотите стратегия слияния поддеревьев. В этой статье более подробно описано, как его использовать.

По сути, вы добавляете репозиторий SVN в качестве удаленного, а затем используете команду git read-tree, чтобы «привить» его как подкаталог вашего чистого репозитория git. В зависимости от того, как вы хотите, чтобы истории отображались, вы можете либо выполнить git merge -s subtree, чтобы объединить их с вашей веткой pure-git (с сохранением коммитов git-svn), либо вы можете выполнить шаги во второй ссылке и добавить флаги --squash и --no-commit и чтобы слияние отображалось как один коммит в ветке pure-git.

В инструкциях предполагается, что пульт также является репозиторием git. Если локальное репо было создано с помощью git вместо git-svn, не уверен, насколько хорошо оно будет работать. Это своего рода кладж, но вот несколько скриптов для создания промежуточного репозитория, который просто отражает репозиторий SVN в git. Таким образом, вы можете создать зеркало git-svn репозитория svn и добавить его в качестве удаленного, и приведенные выше инструкции должны работать, как описано.

person just_doug    schedule 31.03.2011