Как перейти от сложного хранилища Subversion к распределенной системе контроля версий? - PullRequest
3 голосов
/ 08 мая 2009

Предположим, у нас есть хранилище 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/ndom0.1,0.2} деревья, / variableA / trunk tree, ...
  • информирование dvcs об отношении наследования этих деревьев

Ответы [ 4 ]

3 голосов
/ 26 мая 2009

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

2 голосов
/ 08 мая 2009

Для 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 clone .

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

/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/*/*, которые будут глубоко изучать иерархию ветвей. См. этот пост для примера использования.

1 голос
/ 08 мая 2009

$ bzr svn-import --layout trunk1 svn-root-url bzr.repo

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

1 голос
/ 08 мая 2009

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

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

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