Как обрабатывать нестандартный импорт Subversion в Git

У нас есть нестандартный репозиторий 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)

Что касается веток и тегов, мы бы хотели, чтобы код из «стабильного» заканчивался как ветки, код из тегов, чтобы в конечном итоге они превратились в теги в стабильной версии.

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

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

Есть ли у кого-нибудь рекомендации по выполнению этого импорта?

Например:

  • Можно ли сохранить полную историю реструктуризаций?
  • Следует ли нам как-то переписать репозиторий Subversion, чтобы очистить его перед import, и если да, то как?
  • Следует ли нам импортировать полную историю, а затем реструктурировать ее в Git, и как это сделать?
  • Есть идеи, как сделать этот импорт чистым?
5
задан Allen 26 January 2012 в 13:04
поделиться