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

У меня нет большого опыта работы с Mercurial, я в основном парень из Git.

Я хотел бы отразить конкретную папку / файл Mercurial в Git Repository. На самом деле я пытаюсь экспортировать историю файла из репозитория Mercurial в Git и сохранять ее синхронизацию с будущими коммитами.

Есть ли у вас какие-либо предложения о том, как поступить? Я считаю, что для этого нужно получить историю исправления Mercurial, периодически экспортировать каждый коммит в виде исправления и применять исправления Mercurial к репозиторию Git.

5 ответов

Попробуйте с быстрым экспортом:

cd
git clone git://repo.or.cz/fast-export.git
git init git_repo
cd git_repo
~/fast-export/hg-fast-export.sh -r /path/to/old/mercurial_repo
git checkout HEAD

Hg-Git расширение

Hg-Git может использоваться для преобразования хранилища Mercurial в Git. Вы можете использовать локальный или удаленный репозиторий, доступ к которому осуществляется через SSH, HTTP или HTTPS.

Пример конвертации локальных репозиториев.

  1. Установите Hg-Git.

    • В Windows TortoiseHg поставляется с Hg-Git, хотя вам необходимо включить его с помощью инструмента настройки (в разделе расширений)

      Настройки TortoiseHg

      или вручную в ~/mercurial.ini

      [extensions]
      hggit =
      
  2. Используйте следующие команды для преобразования хранилища:

    $ mkdir git-repo; cd git-repo; git init; cd ..
    $ cd hg-repo
    $ hg bookmarks hg
    $ hg push ../git-repo
    

hg Закладка необходима для предотвращения проблем, так как в противном случае hg-git выдвигает текущую проверенную ветку, сбивая с толку Git Это создаст ветку с именем hg в репозитории Git. Чтобы получить изменения в мастере, используйте следующие команды (необходимо только при первом запуске, позже просто используйте git merge или же rebase):

$ cd git-repo
$ git checkout -b master hg

Вы можете (со стороны Mercurial):

  • используя расширение Convert с --filemap опция конвертировать часть оригинального репо в меньший с только необходимыми файлами | каталогами
  • с расширением hg-git push раздетого репо в Git

или (вместо hg-git), используя Mercurial bridge в Git, clone | pull репозиторий из Git

Gitify

Похоже, более современная и простая в использовании альтернатива для выполнения конвертации https://github.com/buchuki/gitifyhg

pip install gitifyhg
git clone gitifyhg::<hgrepoaddress>
# done, you have a git repo with the entire history of the hg one

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

Если с кодировкой проблем нет - используйте расширение TortoiseHG Hg-Git

md new-repo && cd new-repo
git init --bare .git
cd ..\old-mercurial-repo
hg bookmark -r default master
hg push ..\new-repo
cd ..\new-repo
git config --bool core.bare false

Если что-то не так с кодировкой - используйте быстрый экспорт

Установить Bash

Откройте PowerShell от имени администратора и запустите:

Enable-WindowsOptionalFeature -Online -FeatureName Microsoft-Windows-Subsystem-Linux

Установите Ubuntu 16.04 LTS из Microsoft Store

Откройте Bash и запустите

установить ртутный

sudo -s
apt-get update
apt install mercurial

получить fast-export v180317 (на данный момент версии после 180317 работают некорректно)

cd /mnt/c/path_to_work_folder
git clone https://github.com/frej/fast-export.git
cd fast-export
git checkout tags/v180317
cd ..

преобразовать репозиторий

git init new-repo && cd new-repo
git config core.ignoreCase false && git config core.quotepath off
../fast-export/hg-fast-export.sh -r ../path_to_mercurial_repo/ --fe cp1251
git checkout master

варианты кодирования:

  • -f кодировка, например -f cp1251
  • --fe кодировка имени файла, например --fe cp1251

hg-git-fast-import

https://github.com/kilork/hg-git-fast-import

Еще одна утилита со следующими функциями:

  1. Импорт одного и нескольких репозиториев Mercurial в репозиторий Git.
  2. Импорт новых ревизий из ранее импортированных репозиториев Mercurial в репозиторий Git.
  3. Теги.
  4. Закрытые отделения.
  5. Проверка конечного результата с помощью diff.

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

cargo install hg-git-fast-import

Тогда использование выглядит так:

hg-git-fast-import single /path/to/source_hg /path/to/target_git

Это не нужно Python а также Mercurialбыть установленным. Расширенная конфигурация позволяет заменять авторов или ветки, делать ветки префиксом и многое другое.

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

Если вы используете github.com, похоже, у них есть функция импорта, которая позволяет вам просто ввести URL-адрес вашего проекта hg.

Сначала создайте новый репозиторий, а затем на целевой странице нового репозитория прокрутите вниз и нажмите кнопку "Импортировать код".

Затем введите URL-адрес вашего предыдущего репозитория и нажмите "Начать импорт".

Об остальном позаботится GitHub!

Обратите внимание, что GitHub запросит у вас учетные данные для старого репозитория, если они ему понадобятся.

Ой! Я нашел официальное руководство

Может быть, это кому-то поможет сегодня (при преобразовании репозитория Mercurial в git с сохранением истории). Протестировано для работы с Mercurial 4.0.1.

~$ git clone https://*old_hg_repo*
~$ git clone https://github.com/frej/fast-export.git
~$ cd fast-export
~$ git checkout tags/v180317
~$ cd ..
~$ mkdir new_git_repo
~$ cd new_git_repo
~$ git init
~$ .../fast-export/hg-fast-export.sh -r ../old_hg_repo/ --force
~$ git checkout HEAD

И, наконец, подтолкнуть недавно преобразованное местное репо.

~$ git push REMOTE '*:*'

На Windows может быть немного сложнее. После включения нужных плагинов в Mercurial (hggit), TortoiseHG также может быть использован.

  1. Клон ртутного репо
  2. Клон Git РЕПО
  3. Включить консоль: Включение консоли
  4. Используя консоль:

    % hg bookmarks hg

    % hg push <relative path to>/<git-repo>

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