Как преобразовать мой репозиторий Git в Mercurial и вывести его теги

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

hg convert myrepos myrepos-hg

Команда успешно импортирует все мои коммиты, но она не выводит по 8 или около того теги, которые были помечены в репозитории Git (и ни одна из ветвей не имеет значения). Есть ли специальный параметр, который мне нужно настроить для импорта моих тегов в Mercurial?

Ответ 1

Являются ли ваши теги легкими git тегами или заполнены аннотированными тегами? hg convert только преобразует аннотированные теги, но git по умолчанию создает легкие. У меня была эта проблема при конвертации одного из моих репозиториев в последнее время. Вы можете проверить, что они таковы:

git ls-remote --tags .

Запуск hg convert будет преобразовывать теги, заканчивающиеся на ^{}, аннотированные. У вас есть 2 варианта:

  • исправить файл расширения git.py hgext для преобразования всех типов
  • измените теги git на аннотированные теги перед конверсией

С небольшой оболочкой script и параметром -force до git -tag вы можете аннотировать все ваши теги.

Ответ 2

Это несколько известная проблема. Вы можете попробовать исправить следующий файл /usr/lib/python 2.6/site-packages/hgext/convert/hg.py(или где бы он ни находился), изменив это:

extra = {'branch': self.tagsbranch}

в

extra = {'branch': 'default'}

а затем снова преобразует его.

РЕДАКТИРОВАТЬ: При более глубоком взгляде на состояние вещей кажется, что может быть сложно - не невозможно - делать то, что вы хотите. Тем более, чтобы сделать это правильно.

Так как у вас есть только 8 тегов, подумайте о том, чтобы сэкономить на себе трудность, создав файл .hgtags вручную. Вы можете понять, что происходит с "hg convert" позже (я тоже буду держать глаза в тени).

Luck.

Ответ 3

Одно из предложений, которое я видел в прошлом, - использовать svn в качестве промежуточного шага. Оба git и hg имеют превосходное двунаправленное преобразование svn.