Разделить хранилище Subversion на несколько хранилищ Mercurial? - PullRequest
17 голосов
/ 18 ноября 2010

Мы мигрируем из 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 ]

8 голосов
/ 18 ноября 2010

Теперь у меня все работает, благодаря вики-странице ConvertExtension !

Я попробовал метод Ry4an, но он имел недостатки, заключающиеся в необходимости сначала конвертировать репозиторий SVN впромежуточный репозиторий Mercurial до разделения всего, и что ветви, ствол и теги не были распознаны, потому что есть два проекта, каждый из которых имеет свои собственные ветви, ствол и теги.

Я обнаружил, что вручную определяю ветвиКаталог, trunk и tags отлично работал для преобразования одного проекта из 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 голосов
/ 18 ноября 2010

Другой способ решить эту проблему - использовать svnadmin dump и svndumpfilter, чтобы разделить репозиторий svn на один новый репозиторий svn для проекта, как описано в документации svn. Разделение репозиториев путем фильтрации истории репозитория

0 голосов
/ 18 ноября 2010

Это легко сделать, используя расширение '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, есть еще один вопрос, на котором я ответил примерно так же и вставил в полный пример, но это должно бытьдостаточно, чтобы вы пошли.

...