Разделить хранилище Subversion в несколько хранилищ Mercurial?
Мы переходим из Subversion в Mercurial и сталкиваемся с проблемой в процессе преобразования SVN- > Hg. Прямо сейчас, наш единственный SVN-репо содержит код для пары отдельных "проектов", и мы хотели бы разделить их на части процесса миграции. Наш репо SVN организован как:
.
|-- proj1
| |-- branches
| |-- tags
| `-- trunk
`-- proj2
|-- branches
|-- tags
`-- trunk
и мы хотели бы просто сделать proj1
и proj2
свои собственные репозитории Hg. Конечно, мы бы хотели, чтобы в журнале proj2
не отображалась история, характерная для proj1
. Прямо сейчас, когда hg convert
делает преобразование, он просто читает все файлы довольно тупо, даже не выделяя ветки из сундуков.
Каков процесс фильтрации по каталогу и распознавания ветвей SVN в hg convert
?
Ответы
Ответ 1
Теперь у меня это работает, благодаря странице ConvertExtension wiki!
Я попробовал метод Ry4an, но он пришел с недостатками, заключающимися в том, чтобы сначала преобразовать SVN-репо в промежуточное репозиторию Mercurial, прежде чем раскалывать все, и что ветки, туловище и теги не распознаются, потому что есть два проекта каждый с их собственными ветвями, туловищем и тегами.
Я обнаружил, что вручную указание каталога ветвей, туловищ и тегов отлично поработало для преобразования одного проекта из SVN в Mercurial за раз:
hg \
--config convert.svn.trunk=proj1/trunk \
--config convert.svn.branches=proj1/branches \
--config convert.svn.tags=proj1/tags \
convert --authors authors.txt original-svn-dir hg-proj1
Это будет учитывать распознавание ветвей SVN, тегов и соединительных линий и фильтра только для версий proj1
в одно и то же время. Затем я просто повторил его для proj2
.
Ответ 2
Другим способом решения этой проблемы будет использование svnadmin dump и svndumpfilter для разделения репозитория svn в один новый репозиторий svn для каждого проекта, как описано в документации svn.
Разделение репозиториев путем фильтрации истории хранилища
Ответ 3
Это легко сделать, используя расширение 'convert', как вы предложили. Здесь процедура:
- сделать a
hg convert SVNREPO all-in-one-mercurial-repo
от svn до mercurial со всем
- выполнить несколько команд
hg convert --filemap projectfilemap.txt all-in-one-mercurial-repo project-repo
- по одному на проект
В этих файлах есть строки:
exclude proj1
rename proj2 .
Это будет использовать filemap при извлечении всего двух проектов репо из универсального репозитория all-in-one. Возможно, вам нужно будет указать каждый отдельный файл на этих картах, но я думаю, что каталоги в порядке.
Здесь еще один вопрос о SO, где я ответил почти то же самое и вставлял в полный пример, но этого должно быть достаточно, чтобы вы пошли.