Разделить хранилище Subversion на несколько хранилищ Mercurial?
Мы мигрируем из Subversion в Mercurial и столкнулись с ударом в процессе конвертации SVN->Hg. Прямо сейчас наше единственное хранилище SVN содержит код для нескольких отдельных "проектов", и мы хотели бы разделить их в процессе миграции. Наше репо SVN организовано как:
.
|-- proj1
| |-- branches
| |-- tags
| `-- trunk
`-- proj2
|-- branches
|-- tags
`-- trunk
и мы хотели бы просто сделать proj1
а также proj2
их собственные репозитории Hg. Конечно, нам бы не хотелось, чтобы история proj1
появляться в proj2
Логи тоже нет. Прямо сейчас, когда hg convert
делает преобразование, он просто тупо читает все файлы, даже не различая ветви от стволов.
Как происходит фильтрация по каталогам и распознавание веток SVN в hg convert
?
3 ответа
Теперь у меня все работает, благодаря вики-странице ConvertExtension!
Я попробовал метод 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
,
Другой способ решить эту проблему - использовать svnadmin dump и svndumpfilter, чтобы разделить репозиторий svn на один новый репозиторий svn для проекта, как описано в документации svn. Разделение репозиториев путем фильтрации истории репозитория
Это легко сделать, используя расширение 'convert', как вы предложили. Вот процедура:
- сделать
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 .
Это будет файловая карта, используемая при извлечении репо всего проекта два из ртутного репозитория all-in-one. Возможно, вам придется перечислить каждый отдельный файл на этих картах, но я думаю, что каталоги в порядке.
Здесь, на SO, есть еще один вопрос, на котором я ответил почти на то же самое и вставил полный пример, но этого должно быть достаточно, чтобы вы начали.