Миграция сложной ветки иерархии из SVN в Git - PullRequest
3 голосов
/ 31 мая 2011

Как можно перенести большой репозиторий SVN (несколько ГБ) с сотнями веток в репозиторий Git?Не искать их для совместной работы, просто способ избавиться от SVN.

Из некоторых экспериментов, которые я провел с git svn, не ясно, как задать сложную иерархию ветвей.Особенно когда ветки часто удаляются в SVN ...

Вот пример иерархии, о которой я говорю:

trunk/
tags/
vendors/boost/
branches/ProjectA/
branches/ProjectA/MajorVersion/
branches/ProjectA/MajorVersion/MinorVersion/
branches/Experimental1/
branches/RecycleBin/OldDiscardedBranch

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

Есть ли способ передать всю эту информацию о местонахождении филиала в Git?Что будет делать git-svn, когда попытается перенести ревизию, принадлежащую удаленной ветви?

1 Ответ

2 голосов
/ 31 мая 2011

Я пытался делать похожие вещи с другим репо.Конечный результат моего мышления и игры заключается в том, что вам нужно сделать несколько вещей:

  • Используйте git filter-branch, чтобы переписать один проект в другой.IE, используйте git filter-branch, чтобы переименовать все в подкаталоге в родительский.В моем случае у меня есть несколько модулей в trunk , и я использую фильтр-ветку, чтобы переместить все в одном каталоге наверх.
  • Сделайте это также для каждой ветви, но также удалите все ветви, которые не относятся к конкретному проекту

Таким образом, в итоге у вас будет несколько git репо, содержащих только один проект на репо (так, как это должноbe).

Если каталоги ветвлений / тегов являются сложными, команда git svn clone позволит вам указать несколько каталогов тегов и каталогов с помощью запятой (если я помню).

Кроме того, выполните командуgit gc --aggressive после того, как вы закончили извлекать все, чтобы немного уменьшить размер репо.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...