Как перейти от сложного репозитория Subversion к распределенной системе контроля версий?

StackOverflow https://stackoverflow.com/questions/839683

Вопрос

Предположим, у нас есть репозиторий Subversion, который выглядит так:

/original/0.1
/original/0.2
/variantA/trunk
/variantA/branches/who/branch_for_xxx
/variantA/branches/she/branch_for_yyy
/variantB/trunk
/variantB/branches/who/branch_for_zzz
(... 30 or 40 alike)

где вариант A и вариант B — это версии исходного программного обеспечения.

Я ищу способ переноса этого репозитория в распределенную систему контроля версий:метод

  • не обязательно использовать одну команду
  • для любой из известных распределенных систем контроля версий
  • заставить dvcs думать об этих ветвях:/official/{0.1,0.2} деревья, /variantA/дерево ствола, ...
  • информирование dvcs об отношении наследования этих деревьев
Это было полезно?

Решение

Если вы считаете Гит в качестве возможного кандидата DVCS — сценарий Ruby. svn2git делает то, что вам нужно.

Подробнее в вопросе: Клонирование нестандартного репозитория Svn с помощью Git-Svn

Другие советы

Mercurial поставляется с расширением Convert, которое должно делать то, что вы хотите.См. преобразовать детали расширения на веб-сайте Mercurial.

Для Git см. инструкции по адресу http://github.com/guides/import-from-subversion

В последний раз, когда я делал это вручную, я использовал команды ниже.(Это было для проекта, в котором не использовались теги или ветки.С использованием svn2git может дать лучшие результаты, чем git-svn, если у вас есть теги или ветки.)

cat "mysvnusername = Me Myself <me.myself@somewhere.com>" >> authors.txt

svnserve --daemon --foreground --root <SVN-REPO-PARENT-DIR>
git svn clone --stdlayout --authors-file=authors.txt --no-metadata svn://localhost/<SVN-REPO-NAME>

# push to a public repo and clone from there, to get push/pull working easily
cd <SVN-REPO-NAME>
git remote add origin git@github.com:mygithubusername/<GIT-REPO-NAME>.git
git push origin master
cd ..
rm -rf <SVN-REPO-NAME>

git clone git@github.com:mygithubusername/<GIT-REPO-NAME>.git

Но поскольку у вас нестандартная структура репозитория SVN, вам нужно будет указать параметры --trunk, --tags и --branches вместо --stdlayout для клон git svn.

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

/branches/original-0.1
/branches/original-0.2
/branches/variantA-trunk
/branches/variantA-who-branch_for_xxx
/branches/variantA-she-branch_for_yyy
/branches/variantB-trunk
/branches/variantB-who-branch_for_zzz
...

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

Кроме того, я слышал, что Git 1.6.x поддерживает глубокое клонирование, так что вы можете git svn clone такие параметры, как --branches=branches/*/* который будет глубоко изучать иерархию ветвей.Видеть эта почта для примера его использования.

$ bzr svn-import --layout Trunk1 svn-корневой URL bzr.repo

Должен поступить правильно.Для этого вам необходимо установить плагин bzr-svn.

Лицензировано под: CC-BY-SA с атрибуция
Не связан с StackOverflow
scroll top