Преобразование Mercurial репозитория в Git

Я уже пробовал hg2git через быстрый экспорт и уже пробовал hg-git.

Оба безуспешно. hg2git на самом деле работал, но мне пришлось попросить друга, который работает на Unix-машине, сделать это. И это испортило все переводы строк в файлах.

hg-git просто потерпел неудачу с некоторой ошибкой сжатия libzip.

У кого-нибудь был успех в преобразовании репозитория hg в git на Windows?

Чтобы было ясно, мне нет дела до взаимодействия. Я хочу перенести весь репо с hg на git, взяв историю с собой. Мне не нужно толкать изменения назад и вперед - конвертировать только один раз.

Ответ 1

Помогло ли Mac на моем Mac успешно экспортировать репозиторий Mercurial на Git (с полными ветвями):

mkdir myrepo; cd myrepo;
git clone git://repo.or.cz/fast-export.git .
rm -rf .git .gitignore
git init
./hg-fast-export.sh -r ../path/to/local/hg/repo
git clean -f # remove fast-export files

Ответ 2

64-разрядное решение Windows 7

Как преобразовать репозиторий Mercurial в репозиторий Git.

Это одна из самых сумасшедших последовательностей событий, которые мне когда-либо приходилось выяснять, но я вообще не парень Python.

Моя начальная среда

  • Visual Studio 2010/2012
  • TortoiseHg 2.8.2; Включает Mercurial 2.6.3 и Python 2.7.3.
  • Git 1.8.3

Ошибки, которые я получил по пути

  • Не удалось найти Python
  • Не удалось найти модуль Mercurial в Python
  • Easy_Install не существует
  • Не удалось скомпилировать модуль Mercurial

Что я сделал

  • Если бы установить Python27 отдельно (http://www.python.org/)
  • Обязательно укажите путь в пути в переменных среды
  • Придется установить Easy_Install (http://sourceforge.net/projects/pywin32/files/)
  • Убедитесь, что путь Python Scripts также находится в переменных среды
  • И получите это... Пришлось перейти в MSDN и загрузить полную версию Visual Studio 2008 и установить С++ только с включенной 64-битной опцией (поэтому Easy_Install мог скомпилировать модуль Mercurial для Python), но я не мог заставить его работать с Express Edition, потому что не смог найти 64-битный вариант.

Действия

  • В командной консоли (после того, как все установлено)
    • C:\easy_install mercurial

(Если вы установили все, что вы должны увидеть, загрузите и скомпилируйте модуль Mercurial)

  • В Git Консоль
    • Выполните шаги by @mauvis-ledford и @benno (Спасибо, ребята!!!)

Ответ 3

Вот простой пример того, как экспортировать локальный клон репозитория Mercurial в GitHub.

Сначала добавьте расширение hggit к вашему файлу ~/.hgrc, если вы еще этого не сделали:

[extensions]
hggit =

Затем запустите следующие команды из корня вашего репозитория Mercurial:

hg bookmark -r default master
hg push -f git+ssh://[email protected]/bolinfest/plovr.git

Лично мне приходилось указывать -f при запуске hg push, хотя я подозреваю, что это связано с тем, что у меня были некоторые сложные ветки в моем репозитории Mercurial. Возможно, вы не найдете нужным для своей миграции.

Убедитесь, что у вас есть URI git+ssh: для вашего репозитория GitHub, а не для URI git:. (URI в командной строке git+ssh: немного сложнее найти в новом интерфейсе GitHub.)

В зависимости от размера вашего репо, запуск hg push может занять некоторое время, поэтому будьте терпеливы. Когда вы закончите, вы сможете увидеть свой проект на GitHub. В этом примере мой проект был доступен https://github.com/bolinfest/plovr.

Как и следовало ожидать, теперь каждый может клонировать ваш публичный репозиторий GitHub следующим образом:

git clone [email protected]:bolinfest/plovr.git

Ответ 4

Вот все части, собранные для миграции в Windows.

Предпосылки

  • Git
  • Mercurial или TortoiseHg
  • Python 2.7 (3.x не будет работать)

Во время установки разрешите привязку к файлам .sh.
Убедитесь, что все инструменты доступны в переменной среды PATH.

Миграция

  • Открыть cmd.exe
  • mkdir c:\git_work
  • cd c:\git_work
  • git clone http://repo.or.cz/r/fast-export.git
    Это создает папку: c:\git_work\fast-export\
  • Теперь вам нужны Mercurial libs для python. Либо получите их из здесь или выполните следующие действия.
    Изменить c:\git_work\fast-export\hg-fast-export.py:

    import sys # move this line up here
    # Add a new line that imports [mercurial libraries][2] from this zip:
    sys.path.append(r'C:\Program Files\TortoiseHg\library.zip')
    # ...above the old line:
    from mercurial import node
    
  • mkdir MyNewGitRepo

  • Копировать содержимое быстрого экспорта в MyNewGitRepo, игнорировать .git *
  • hg-fast-import.sh -r c:\Path\To\MyOldHgRepo
  • Если это не удается с "Ошибка: в репозитории есть хотя бы одна неназванная голова..." вызовите последнюю строку с параметром: --force
  • Удалите сценарии миграции:

    git clean -n # see what would happen
    git clean -f # delete migration files
    
  • Восстановить отсутствующие файлы, сбросив индекс и рабочее дерево.

    git reset --hard
    

Ответ 5

На сегодняшний день дистрибутив git включает инструмент для преобразования меркурийных репозиториев в git, hg-to-git. Если у вас установлена ​​последняя версия git, она есть. Работал очень хорошо для меня.

Ответ 6

Если вы используете GitHub, а ваше Mercurial-репо доступно через HTTP/HTTPS...

В процессе использования быстрого импорта (отличный инструмент, который преобразовал мое репо без проблем) и нажав мой новый репозиторий git из моего dev-модуля на GitHub, я заметил вариант "Импортировать код из другого репозитория", в разделе "Быстрая настройка" моего репозитория git на GitHub.

Я тестировал его и получал те же результаты, что и при использовании быстрого импорта. Использование опции импорта GitHub оказалось немного проще в моем случае, чем быстрый импорт (опять же, ничего против этого инструмента, и нет, я не работаю для GitHub). Шаги, которые работали для меня, были следующими:

  • Создайте новый репозиторий GitHub
  • Выберите опцию "Код импорта" в быстрой настройке после создания репо.
  • Введите URL-адрес общедоступного репозитория hg, svn или tfs и нажмите "Начать импорт" в диалоговом окне "Импорт-импортер Github"

Ответ 7

Если вы действительно хотите сделать это, как только вы можете использовать hg export следующим образом:

hg export 0:tip -o all-changesets-in-one.patch

или если git предпочитает только один патч для каждого файла, вы можете создать его для каждого набора изменений следующим образом:

hg export 0:tip -o changeset-%r.patch

предположительно git apply может принимать один или другой из этих форматов.

Ответ 8

Вы пробовали tailor? Он может в значительной степени конвертировать что угодно, как VCS, и даже способен делать это постепенно (то есть, вы конвертируете один раз, а затем добавляете новые коммиты из источника в цель, без переустановки с нуля). Возможно, вам это не понадобится сейчас, но все же это приятная функция.

Ответ 9

Простым способом преобразования между Git и Hg без локального процесса является открытие бесплатной учетной записи KilnHg/Fogbugz, создание частного repo, нажмите один формат, затем потяните в другой формат, он работает как с Git, так и с Hg и (должен) делать бесшовные конверсии.

Ответ 10

Я попробовал некоторые другие ответы здесь и не имел большой удачи. Вот довольно простой метод, что то, что сработало для меня после долгих проб и ошибок:

Сначала загрузите расширение hggit и добавьте его в файл ~/.hgrc или mercurial.ini, если вы еще этого не сделали:

[extensions]
hggit=\path\to\hg-git

Для каждой ветки, которую вы хотите перевести на Git, добавьте Hg-закладку в конец ветки:

hg bookmarks hg-default

Затем используйте hggit для создания репозитория git в той же папке, что и текущее репо Hg, запустив hg gexport. В результате будет добавлена ​​папка .git. Когда вы удалите папку .hg из своего репо, вы останетесь с локальным репо git.

Ответ 11

Кажется, нет никаких причин, по которым вы не можете запускать hg2git на windows. Это python, который имеет порт Windows. Просто убедитесь, что там есть соответствующие библиотеки и запустите их в окне.