Svn -> git миграция с несколькими транками / ветками / тегами - PullRequest
4 голосов
/ 09 октября 2009

У меня есть один репозиторий SVN со следующей current структурой:

  • project1
    • филиалы
    • багажник
    • 1012 * метки *
  • project2
    • филиалы
    • багажник
    • метка

который изначально имел такую ​​структуру:

  • проект
    • ветви * +1034 *
    • Ствол
      • proj1
      • proj2
    • метка

То есть проект был разделен на две отдельные "суб-репозитории" (или как вы хотите это называть)

Есть ли способ перенести это в git без потери истории ? Будет ли svn2git лучше, чем git-svn для этого сценария? Есть ли другой инструмент миграции?

РЕДАКТИРОВАТЬ : я попробовал git svn clone, как предлагалось, но, как я думал, он не последовал за переходом от старой структуры к новой. Он только импортировал ревизии из новой структуры.

Ответы [ 5 ]

3 голосов
/ 05 февраля 2010

Сначала я преобразовал основной ствол в git:

git svn clone url-to-project -s

Затем я преобразовал каждый проект:

git svn clone url-to-project1 -s
git svn clone url-to-project2 -s
...

Затем для каждого проекта я прикреплял предыдущую историю из основного ствола, используя трансплантаты и фильтр-ветвь.

Я просто написал об этом в блоге .

1 голос
/ 09 октября 2009

svn2git просто использует "git svn" внизу, так что по сути он не будет "лучше". Это просто делает хорошие теги и ветки и очищает вещи для чистого разрыва с SVN. Если это то, что вы хотите, я бы пошел дальше и использовал его в двух суб-репозиториях по отдельности. Он получит всю соответствующую историю.

0 голосов
/ 09 октября 2009

Используйте git svn clone -s SVN_REPOS, чтобы git клонировал репозиторий Subversion в стандартной компоновке Subversion. Вы получите локальную ветку git с именем master, но git branch -a покажет вам все удаленные ветки. В ветвях Subversion будет просто имя ветки, а в тегах - tags/tag_name.

Не используйте повторно имена веток / тегов при локальном клонировании! мерзавцу это не нравится.

Это руководство мне очень помогло.

http://www.viget.com/extend/effectively-using-git-with-subversion/

0 голосов
/ 09 октября 2009

Ваша "текущая" структура уже имеет всю историю из предыдущей структуры. Таким образом, клонирование каждого проекта с использованием git svn clone должно работать нормально.

Не нужно будет рассказывать Git о предыдущей структуре с несколькими проектами в директории транка.

Самое замечательное в Git состоит в том, что вы можете пробовать миграцию столько раз, сколько захотите, пока не будете удовлетворены результатом.

0 голосов
/ 09 октября 2009

Вы уже попробовали встроенный

git svn clone

ГИТ-SVN

...