Преобразование папки 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.
Пример конвертации локальных репозиториев.
Установите Hg-Git.
В Windows TortoiseHg поставляется с Hg-Git, хотя вам необходимо включить его с помощью инструмента настройки (в разделе расширений)
или вручную в
~/mercurial.ini
[extensions] hggit =
Используйте следующие команды для преобразования хранилища:
$ 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
Еще одна утилита со следующими функциями:
- Импорт одного и нескольких репозиториев Mercurial в репозиторий Git.
- Импорт новых ревизий из ранее импортированных репозиториев Mercurial в репозиторий Git.
- Теги.
- Закрытые отделения.
- Проверка конечного результата с помощью 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 также может быть использован.
- Клон ртутного репо
- Клон Git РЕПО
- Включить консоль: Включение консоли
Используя консоль:
% hg bookmarks hg
% hg push <relative path to>/<git-repo>