Разделить хранилище 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', как вы предложили. Вот процедура:

  1. сделать hg convert SVNREPO all-in-one-mercurial-repo от SVN к Mercurial со всем
  2. сделать несколько hg convert --filemap projectfilemap.txt all-in-one-mercurial-repo project-repo команды - одна на проект

Эти файлы имеют такие строки:

exclude proj1
rename proj2 .

Это будет файловая карта, используемая при извлечении репо всего проекта два из ртутного репозитория all-in-one. Возможно, вам придется перечислить каждый отдельный файл на этих картах, но я думаю, что каталоги в порядке.

Здесь, на SO, есть еще один вопрос, на котором я ответил почти на то же самое и вставил полный пример, но этого должно быть достаточно, чтобы вы начали.

Другие вопросы по тегам