Перетворення папки Mercurial у сховище Git


137

Я не маю величезного досвіду роботи з Mercurial, я переважно хлопець Git.

Я хотів би відобразити конкретну папку / файл Mercurial у сховищі git. Що я насправді намагаюся зробити, це експортувати історію файлу з сховища Mercurial до Git і мати можливість синхронізувати це з майбутніми командами.

Чи є у вас якісь пропозиції щодо того, як діяти? Я вважаю, що слід йти, щоб отримати історію Mercurial patch, періодично експортувати кожну комісію як патч та застосовувати Mercurial патчі до сховища Git.


Відповіді:


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

1
Гаразд, ви хочете, щоб git синхронізувався з mercurial? Як це ?
Йоханна

1
Зауважте, що "/ path / to / old / mercurial_repo" повинен бути шлях до файлової системи (а не URL), тому вам доведеться клонувати початкове сховище раніше.
mar10,

1
У моєму випадку довелося використовувати PYTHON=python2 ~/fast-export/hg-fast-export.sh -r /path/to/old/mercurial_repo. Крім того, вона працювала бездоганно.
Артур Чайка

5
Дякую за стислу відповідь! Мені довелося sudo easy_install mercurialспочатку. Було б добре мати інструкцію
Marcus Westin

3
Якщо ви на машині Windows , використання Баш Git і запустити hg-fast-export.sh
Augustas

61

Windows: розширення TortoiseHG Hg-Git

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

Приклад перетворення локальних сховищ.

  1. Встановіть Hg-Git.

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

      Налаштування черепахи

      або вручну в ~/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. Для отримання змін у master використовуйте наступні команди (необхідні лише в першому запуску, пізніше просто використайте git mergeабо rebase):

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

Я виявив, що git-hg є досить баггі, але це спрацювало як шарм, і не потрібно додаткових завантажень, що приємно.
Тимммм

2
Я хотів папку, а не всю репо.
Сімоне Карлетті

Github тепер має інструмент, який підтримує це безпосередньо з github, див. stackoverflow.com/questions/16037787/…
Tommy,

@SimoneCarletti Погляньте на це питання . Це має допомогти вам експортувати файл / папку та її історію у тимчасовий сховище. Тоді ви можете використовувати будь-яке із наданих рішень для перетворення тимчасового сховища Mercurial в Git.
naXa

13

Ви можете (з боку Меркуріалу):

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

або (замість hg-git), використовуючи Mercurial bridge в Git , клонувати | витягувати сховище з Git


11

Гітифікувати

Здається, що більш сучасна та проста у використанні альтернатива для здійснення конверсії 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

Якщо з кодуванням щось не так - використовуйте швидкий експорт

Встановити Bash

Відкрийте PowerShell як адміністратор та запустіть:

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

Встановіть Ubuntu 16.04 LTS з магазину Microsoft

Відкрийте Bash і біжіть

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

sudo -s
apt-get update
apt install mercurial

отримати швидкий експорт 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-git-fast-import

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

Ще одна утиліта з такими функціями:

  1. Імпорт одиночних та декількох сховищ Mercurial у сховище Git.
  2. Імпорт нових редакцій з раніше імпортованих сховищ Mercurial у сховище Git.
  3. Теги.
  4. Закриті гілки.
  5. Перевірка кінцевого результату з розл.

Ви можете завантажити виконавчі для вас платформи і поставити де - то в дорозі або встановити з 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 запитає ваші облікові дані для старого сховища, якщо вони потрібні.

О-о! Я знайшов офіційного довідника


0

У Windows може бути дещо складно. Після ввімкнення правильних плагінів у mercurial ( hggit) також можна використовувати TortoiseHG.

  1. Клонований ртутний репо
  2. Клон git repo
  3. Увімкнути консоль: Увімкнення консолі
  4. Використання консолі:

    % hg bookmarks hg

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


0

Можливо, це комусь допомагає сьогодні (при перетворенні сховища ртутних в git, зберігаючи історію). Тестований для роботи з ртутним 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 '*:*'
Використовуючи наш веб-сайт, ви визнаєте, що прочитали та зрозуміли наші Політику щодо файлів cookie та Політику конфіденційності.
Licensed under cc by-sa 3.0 with attribution required.