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

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

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

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

Ответ 1

В Linux или что-нибудь с bash/sh или аналогичным, или с python, попробуйте быстрый экспорт:

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

Ответ 2

Windows: расширение TortoiseHG Hg-Git

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

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

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

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

      TortoiseHg Settings

      или вручную в ~/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

Ответ 3

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

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

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

Ответ 4

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

Ответ 5

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

Ответ 6

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

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

    % hg bookmarks hg

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

Ответ 7

HG-ГИТ-быстро-импорт

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. Расширенная настройка позволяет заменять авторов или ветки, делать префиксы веток и многое другое.

Ответ 8

Конвертировать репозиторий 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 из Магазина Майкрософт

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

установить Mercurial

sudo -s
apt-get update
apt install mercurial

get-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