Konvertieren des Mercurial-Ordners in ein Git-Repository


137

Ich habe keine große Erfahrung mit Mercurial, ich bin meistens ein Git-Typ.

Ich würde gerne einen bestimmten Mercurial-Ordner / eine bestimmte Mercurial-Datei in einem Git-Repository spiegeln. Eigentlich versuche ich, den Verlauf einer Datei aus einem Mercurial-Repository nach Git zu exportieren und dies mit zukünftigen Commits synchron zu halten.

Haben Sie Vorschläge, wie Sie vorgehen sollen? Ich glaube, der Weg sollte darin bestehen, den Verlauf des Mercurial-Patches abzurufen, jedes einzelne Commit regelmäßig als Patch zu exportieren und die Mercurial-Patches auf das Git-Repository anzuwenden.


Heutzutage wird GitHub.com es für Sie importieren .
Brad Turek

Antworten:


125

Unter Linux oder irgendetwas mit bash/shoder ähnlichem oder pythonversuchen Sie es mit schnellem Export :

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, du willst Git mit Mercurial synchronisieren? Wie das ?
Yohann

1
Beachten Sie, dass '/ path / to / old / mercurial_repo' ein Pfad im Dateisystem sein muss (keine URL), daher müssen Sie das ursprüngliche Repository vorher klonen.
10. März

1
In meinem Fall musste verwenden PYTHON=python2 ~/fast-export/hg-fast-export.sh -r /path/to/old/mercurial_repo. Abgesehen davon hat es einwandfrei funktioniert.
Artur Czajka

5
Vielen Dank für die prägnante Antwort! Ich musste sudo easy_install mercurialzuerst. Wäre schön in der Anleitung zu haben
Marcus Westin

3
Wenn Sie auf einem Windows-Computer sind, verwenden Sie die Git-Bash und führen Sie hg-fast-export.sh
Augustas

61

Windows: TortoiseHG Hg-Git-Erweiterung

Mit Hg-Git kann ein Mercurial-Repository in Git konvertiert werden. Sie können ein lokales Repository oder ein Remote-Repository verwenden, auf das über SSH, HTTP oder HTTPS zugegriffen wird.

Beispiel für die Konvertierung lokaler Repositorys.

  1. Installieren Sie Hg-Git.

    • Unter Windows wird TortoiseHg mit Hg-Git geliefert, Sie müssen es jedoch über das Einstellungswerkzeug (im Abschnitt "Erweiterungen") aktivieren.

      TortoiseHg Einstellungen

      oder manuell in ~/mercurial.ini

      [extensions]
      hggit =
      
  2. Verwenden Sie die folgenden Befehle, um das Repository zu konvertieren:

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

Das hgLesezeichen ist erforderlich, um Probleme zu vermeiden, da sonst hg-git auf den aktuell ausgecheckten Zweig pusht und Git verwirrt. Dadurch wird ein Zweig mit dem Namen hgim Git-Repository erstellt. Um die Änderungen im Master zu erhalten, verwenden Sie die folgenden Befehle (nur beim ersten Durchlauf erforderlich, später nur noch git mergeoder rebase):

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

Ich habe festgestellt, dass git-hg ziemlich fehlerhaft ist, aber das hat wie ein Zauber funktioniert und keine zusätzlichen Downloads erforderlich gemacht, was sehr schön ist.
Timmmm

2
Ich wollte einen Ordner, nicht das gesamte Repo.
Simone Carletti

Github hat jetzt ein Tool, das dies direkt von Github unterstützt, siehe stackoverflow.com/questions/16037787/…
Tommy

@ SimoneCarletti Schauen Sie sich diese Frage an . Es soll Ihnen helfen, eine Datei / einen Ordner und seinen Verlauf in ein temporäres Repository zu exportieren. Anschließend können Sie eine der bereitgestellten Lösungen verwenden, um das temporäre Mercurial-Repository in Git zu konvertieren.
NaXa

13

Sie können (von Mercurial Seite):

  • Verwenden der Konvertierungserweiterung mit der --filemapOption, einen Teil des ursprünglichen Repos in ein kleineres mit nur benötigten Dateien zu konvertieren
  • mit hg-git erweiterung push stripped repo auf git

oder (anstelle von hg-git) mit Mercurial Bridge in Git das Repository von Git klonen | ziehen


11

Gitify

Scheint eine modernere und benutzerfreundlichere Alternative zu sein, um die Konvertierung durchzuführen 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
Ich wollte kein ganzes Repo konvertieren, nur einen Ordner.
Simone Carletti

1
Genial! Vorsicht vor Unicode-Fehlern durch github.com/buchuki/gitifyhg/pull/98
Andrei

3
Hinweis - gitifyhg ist derzeit mit den neuesten Mercurial-Versionen nicht mehr aktuell.
Zoran Pavlovic

4

Konvertieren Sie ein Mercurial-Repository unter Windows 10 in Git

Wenn die Codierung kein Problem darstellt, verwenden Sie die Erweiterung 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

Wenn etwas mit der Codierung nicht stimmt, verwenden Sie den Schnellexport

Installieren Sie Bash

Öffnen Sie PowerShell als Administrator und führen Sie Folgendes aus:

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

Installieren Sie Ubuntu 16.04 LTS aus dem Microsoft Store

Bash öffnen und ausführen

installiere mercurial

sudo -s
apt-get update
apt install mercurial

Get Fast-Export v180317 (im Moment funktionieren Versionen nach 180317 nicht richtig)

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

Repository konvertieren

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

Codierungsoptionen:

  • -f Kodierung, wie -f cp1251
  • --fe Dateinamencodierung wie --fe cp1251

3

hg-git-fast-import

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

Ein weiteres Dienstprogramm mit den folgenden Funktionen:

  1. Import von einzelnen und mehreren Mercurial-Repositorys in das Git-Repository.
  2. Import neuer Revisionen aus zuvor importierten Mercurial-Repositorys in das Git-Repository.
  3. Stichworte.
  4. Geschlossene Zweige.
  5. Überprüfung des Endergebnisses mit diff.

Sie können Binärdateien für Ihre Plattform herunterladen und irgendwo in den Pfad stellen oder mit installieren cargo( rustmuss installiert sein ):

cargo install hg-git-fast-import

Dann ist die Verwendung wie folgt:

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

Es braucht nicht Pythonund Mercurialinstalliert werden. Die erweiterte Konfiguration ermöglicht das Ersetzen von Autoren oder Zweigen, das Präfixieren von Zweigen und vieles mehr.


2

Wenn Sie github.com verwenden , verfügen diese anscheinend über eine Importfunktion , mit der Sie einfach die URL Ihres hg-Projekts eingeben können.

Zuerst ein neues Repository erstellen und dann auf die Zielseite blättert des neuen Repository nach unten und klicken Sie auf die „Import - Code“ Taste .

Kontext für die Schaltfläche Importcode

Geben Sie dann die URL Ihres vorherigen Repositorys ein und klicken Sie auf "Import starten".

Kontext für die Schaltfläche "Import starten"

Dann kümmert sich GitHub um den Rest!

Github kümmert sich um das Geschäft für Sie

Beachten Sie, dass GitHub Sie nach Ihren Anmeldeinformationen für das alte Repository fragt, wenn diese benötigt werden.

Oh! Ich habe den offiziellen Führer gefunden


0

Unter Windows kann es etwas schwierig sein. Nach dem Aktivieren der richtigen Plugins in mercurial ( hggit) kann auch TortoiseHG verwendet werden.

  1. Klonen Sie Mercurial Repo
  2. Klonen Sie Git Repo
  3. Konsole aktivieren: Konsole aktivieren
  4. Verwenden der Konsole:

    % hg bookmarks hg

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


0

Vielleicht hilft es heute jemandem (bei der Konvertierung eines Quecksilber-Repositorys in Git unter Beibehaltung der Historie). Getestet für die Arbeit mit Quecksilber 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

Und schließlich, um Ihr neu konvertiertes lokales Repo voranzutreiben.

~$ git push REMOTE '*:*'
Durch die Nutzung unserer Website bestätigen Sie, dass Sie unsere Cookie-Richtlinie und Datenschutzrichtlinie gelesen und verstanden haben.
Licensed under cc by-sa 3.0 with attribution required.