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

137

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

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

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

Симона Карлетти
источник
В настоящее время GitHub.com будет импортировать его для вас .
Брэд Турек

Ответы:

125

В 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
Yohann
источник
1
Хорошо, вы хотите синхронизировать git с mercurial? Как это ?
Йоханн
1
Обратите внимание, что «/ path / to / old / mercurial_repo» должен быть путем в файловой системе (не URL-адресом), поэтому вы должны клонировать исходный репозиторий раньше.
марта
1
В моем случае пришлось использовать PYTHON=python2 ~/fast-export/hg-fast-export.sh -r /path/to/old/mercurial_repo. Кроме того, это работало безупречно.
Артур Цайка
5
Спасибо за краткий ответ! Я должен был sudo easy_install mercurialсначала. Было бы неплохо иметь в инструкции
Маркус Вестин
3
Если вы работаете на Windows, используйте git bash и запустите hg-fast-export.sh
Augustas
61

Windows: расширение TortoiseHG 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. Это создаст ветку с именем hgв репозитории Git. Чтобы получить изменения в мастере, используйте следующие команды (необходимо только при первом запуске, позже просто используйте git mergeили rebase):

$ cd git-repo
$ git checkout -b master hg
naXa
источник
Я обнаружил, что git-hg довольно глючит, но это работает как шарм и не требует никаких дополнительных загрузок, что приятно.
Тимммм
2
Я хотел папку, а не весь репо.
Симона Карлетти
У github теперь есть инструмент, который поддерживает это непосредственно из github, см. stackoverflow.com/questions/16037787/…
Tommy
@SimoneCarletti Посмотрите на этот вопрос . Это должно помочь вам экспортировать файл / папку и ее историю во временный репозиторий. Затем вы можете использовать любое из предоставленных решений для преобразования временного хранилища Mercurial в Git.
NaXa
13

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

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

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

Ленивый Барсук
источник
11

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
Сорин
источник
1
Я не хотел конвертировать весь репо, просто папку.
Симона Карлетти
1
Потрясающие! Остерегайтесь ошибок Unicode, хотя github.com/buchuki/gitifyhg/pull/98
Андрей
3
Примечание - gitifyhg в настоящее время сильно устарела с последними версиями Mercurial.
Зоран Павлович
4

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

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

Установить Bash

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

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

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

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

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

sudo -s
apt-get update
apt install mercurial

get 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
Сандре
источник
3

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

Александр Королев
источник
2

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

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

контекст для кнопки импорта кода

Затем введите URL вашего предыдущего хранилища и нажмите «Начать импорт».

контекст для кнопки «Начать импорт»

Тогда GitHub позаботится об остальном!

Github заботится о бизнесе для вас

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

Ooh! Я нашел официальный путеводитель

Брэд Турек
источник
0

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

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

    % hg bookmarks hg

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

Ivasan
источник
0

Может быть, это кому-то помогает сегодня (при преобразовании ртутного репозитория в 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 '*:*'
SLK
источник