Konwersja folderu Mercurial do repozytorium Git


137

Nie mam dużego doświadczenia z Mercurialem, głównie jestem facetem od Gita.

Chciałbym wykonać kopię lustrzaną określonego folderu / pliku Mercurial w repozytorium git. To, co faktycznie próbuję zrobić, to wyeksportować historię pliku z repozytorium Mercurial do Git i być w stanie zsynchronizować to z przyszłymi zatwierdzeniami.

Czy masz jakieś sugestie, jak postępować? Uważam, że najlepszym rozwiązaniem powinno być zapoznanie się z historią łatki Mercurial, okresowe eksportowanie każdego zatwierdzenia jako łatki i umieszczanie łatek Mercurial w repozytorium Git.


Odpowiedzi:


125

W systemie Linux lub cokolwiek z bash/shlub podobnym albo pythonspróbuj z szybkim eksportem :

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
OK, chcesz zachować synchronizację Gita z Mercurial? Jak to ?
Yohann

1
Zwróć uwagę, że „/ path / to / old / mercurial_repo” musi być ścieżką w systemie plików (nie adresem URL), więc musisz wcześniej sklonować oryginalne repozytorium.
marca

1
W moim przypadku musiał użyć PYTHON=python2 ~/fast-export/hg-fast-export.sh -r /path/to/old/mercurial_repo. Poza tym działało bez zarzutu.
Artur Czajka

5
Dzięki za zwięzłą odpowiedź! Musiałem sudo easy_install mercurialnajpierw. Byłoby miło mieć w instrukcji
Marcus Westin

3
Jeśli korzystasz z systemu Windows, użyj Git bash i uruchom hg-fast-export.sh
Augustas

61

Windows: rozszerzenie TortoiseHG Hg-Git

Hg-Git może służyć do konwersji repozytorium Mercurial do Git. Możesz użyć repozytorium lokalnego lub repozytorium zdalnego, do którego można uzyskać dostęp przez SSH, HTTP lub HTTPS.

Przykład konwersji lokalnych repozytoriów.

  1. Zainstaluj Hg-Git.

    • W systemie Windows TortoiseHg jest dostarczany z Hg-Git, chociaż musisz go włączyć za pomocą narzędzia ustawień (w sekcji rozszerzeń)

      Ustawienia TortoiseHg

      lub ręcznie w ~/mercurial.ini

      [extensions]
      hggit =
      
  2. Użyj następujących poleceń, aby przekonwertować repozytorium:

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

hgZakładka jest konieczne, aby zapobiec problemom jak inaczej hg-git popycha do aktualnie wyrejestrowany oddziału mylące Git. Spowoduje to utworzenie gałęzi nazwanej hgw repozytorium Git. Aby uzyskać zmiany w module głównym, użyj następujących poleceń (konieczne tylko w pierwszym uruchomieniu, później po prostu użyj git mergelub rebase):

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

Zauważyłem, że git-hg jest dość błędny, ale to działało jak urok i nie wymagało żadnych dodatkowych pobrań, co jest miłe.
Timmmm

2
Chciałem mieć folder, a nie całe repozytorium.
Simone Carletti

github ma teraz narzędzie, które obsługuje to bezpośrednio z github, patrz stackoverflow.com/questions/16037787/ ...
Tommy

@SimoneCarletti Spójrz na to pytanie . Powinien pomóc w wyeksportowaniu pliku / folderu i jego historii w tymczasowym repozytorium. Następnie możesz użyć dowolnego z dostarczonych rozwiązań, aby przekonwertować tymczasowe repozytorium Mercurial na Git.
naXa

13

Możesz (od strony Mercuriala):

  • używając rozszerzenia Convert z --filemapopcją konwertuj część oryginalnego repozytorium na mniejsze z tylko potrzebnymi plikami | katalogami
  • z rozszerzeniem hg-git push stripped repo do Git

lub (zamiast hg-git), używając mostka Mercurial w Git , clone | pull repository from Git


11

Gitify

Wydaje się, że jest to bardziej nowoczesna i łatwiejsza w użyciu alternatywa do wykonania konwersji 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
Nie chciałem konwertować całego repozytorium, tylko folder.
Simone Carletti,

1
Niesamowite! Uważaj na błąd Unicode, chociaż github.com/buchuki/gitifyhg/pull/98
Andrei

3
Uwaga - gitifyhg jest obecnie bardzo nieaktualny z najnowszymi wersjami Mercurial.
Zoran Pavlovic

4

Konwertuj repozytorium Mercurial na Git w systemie Windows 10

Jeśli nie ma problemu z kodowaniem - użyj rozszerzenia 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

Jeśli coś jest nie tak z kodowaniem - użyj szybkiego eksportu

Zainstaluj Bash

Otwórz PowerShell jako administrator i uruchom:

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

Zainstaluj Ubuntu 16.04 LTS ze sklepu Microsoft Store

Otwórz Bash i uruchom

zainstaluj mercurial

sudo -s
apt-get update
apt install mercurial

uzyskać szybki eksport v180317 (w tej chwili wersje po 180317 nie działają poprawnie)

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

konwertować repozytorium

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

opcje kodowania:

  • -f kodowanie, na przykład -f cp1251
  • --fe kodowanie nazwy pliku, takie jak --fe cp1251

3

hg-git-fast-import

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

Kolejne narzędzie z następującymi funkcjami:

  1. Import pojedynczych i wielu repozytoriów Mercurial do repozytorium Git.
  2. Import nowych wersji z wcześniej zaimportowanych repozytoriów Mercurial do repozytorium Git.
  3. Tagi.
  4. Zamknięte oddziały.
  5. Weryfikacja wyniku końcowego za pomocą diff.

Możesz pobrać plik binarny dla swojej platformy i umieścić go w ścieżce lub zainstalować z cargo(wymagane rustdo zainstalowania ):

cargo install hg-git-fast-import

Wtedy użycie jest takie:

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

Nie wymaga Pythoni Mercurialdo zainstalowania. Zaawansowana konfiguracja pozwala na podmianę autorów lub oddziałów, tworzenie gałęzi z prefiksem i nie tylko.


2

Jeśli korzystasz z github.com , wygląda na to , że mają one funkcję importowania, która pozwala po prostu wpisać adres URL projektu hg.

Najpierw utwórz nowe repozytorium, a następnie na landing page nowego repozytorium przewiń w dół i kliknij przycisk „Importuj kod” .

kontekst dla przycisku importu kodu

Następnie wpisz adres URL swojego poprzedniego repozytorium i kliknij „Rozpocznij import”.

kontekst dla przycisku „Rozpocznij import”

Następnie GitHub zajmie się resztą!

Github dba o Twój biznes

Zauważ, że GitHub poprosi Cię o podanie danych logowania do starego repozytorium, jeśli będzie ich potrzebować.

Ooh! Znalazłem oficjalny przewodnik


0

W systemie Windows może być trochę trudne. Po włączeniu odpowiednich wtyczek w mercurial ( hggit), można również użyć TortoiseHG.

  1. Klonuj repozytorium Mercurial
  2. Sklonuj repozytorium git
  3. Włącz konsolę: włączanie konsoli
  4. Korzystanie z konsoli:

    % hg bookmarks hg

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


0

Może to komuś dzisiaj pomaga (przy konwersji repozytorium rtęci na git, przy jednoczesnym zachowaniu historii). Przetestowano pod kątem współpracy z 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

I wreszcie, aby przekazać nowo przekonwertowane lokalne repozytorium.

~$ git push REMOTE '*:*'
Korzystając z naszej strony potwierdzasz, że przeczytałeś(-aś) i rozumiesz nasze zasady używania plików cookie i zasady ochrony prywatności.
Licensed under cc by-sa 3.0 with attribution required.