У нас есть нестандартный репозиторий subversion, который мы хотели бы преобразовать в Git. Проблема в том, что я не знаю, с чего начать, чтобы убедиться, что мы храним полную историю, но не заканчиваем полным беспорядком.
Наш репозиторий имеет последние 6 лет истории для набора продуктов наших компаний и прошел многочисленные реструктуризации. Во всех случаях у нас есть базовая кодовая база платформы, а затем несколько проектов / плагинов, которые по-разному объединяются поверх базовой платформы.
Первые пару лет были структурированы как:
-- plugin1
- trunk
- branches
- tags
-- pluginX
- trunk
- branches
- tags
-- trunk (core platform)
- <various sub dirs)
-- branches (various feature branches of the entire repository)
- refactoring1
- refactoringX
-- tags (various tags of customer releases of full respository)
- customerX_1.x
-- vendor (vendor drops and tracking of 3rd party source deps)
- 3rd_party_code_A
- 3rd_party_code_X
Со временем мы добавили еще пару каталогов в корень, включая:
-- releases (replaced tags; branches for released stable versions of repos)
-- sandbox (area for misc projects of interest; should have been new repo)
Затем мы убрали это и получили:
-- trunk
- platform
- plugin1
- pluginX
-- stable (stable release branches of trunk)
- 1.1
- 1.2
-- tags (release points; marks a point on a stable branch)
- 1.1.1
- 1.1.2
-- vendor
-- sandbox
-- releases (copies of old releases of interest)
Так что это наша история. То, что мы хотим закончить, мы надеемся, намного чище. Прямо сейчас мы думаем о том, как выглядит база репозитория git (в основном, копия предыдущего каталога trunk).
- platform
- plugin1
- pluginX
Branches:
- stable/1.1
- stable/1.2
Tags:
- rel/1.1.1
- rel/1.1.2
Мы хотели бы поместить песочницу и поставщика в свои собственные репозитории. (не уверен, как это сделать, но, возможно, есть способ импортировать только подмножество хранилища svn)
Что касается ветвей и тегов, мы бы хотели, чтобы код из 'stable' заканчивался как ветви, а код из 'tags' - как теги в стабильный.
Для более старой истории из первоначальной структуры мы хотели бы сохранить как можно больше истории, но не хотим загрязнять новый репозиторий. Например, если бы мы могли оглянуться назад и увидеть изменения, которые произошли в ветвях рефакторинга, это было бы здорово, но не обязательно.
В настоящее время мы обсуждаем, как поступить и как все правильно реструктурировать и импортировать. По крайней мере, нам нужен способ иметь полную историю платформы и кода плагина в обеих предыдущих реструктуризациях репозитория. Если возможно, мы также хотели бы получить стабильную информацию и теги из самой последней структуры хранилища.
У кого-нибудь есть рекомендации, как сделать этот импорт?
Например:
- Можно ли сохранить полную историю реструктуризации?
- Должны ли мы как-то переписать хранилище Subversion, чтобы очистить его перед импортом, и если да, то как?
- Должны ли мы импортировать полную историю, а затем реструктурировать ее в Git и как?
- Есть идеи, как сделать этот импорт чистым?