Импорт репо SVN в существующее Git-репо как ветвь - PullRequest
5 голосов
/ 31 марта 2011

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

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

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

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

Возможность возвращаться в 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

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

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

1 Ответ

2 голосов
/ 31 марта 2011

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

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

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

...