Mercurial-Repository nach Git konvertieren

Git wird immer populärer und gefühlsmäßig gerät Mercurial ins Hintertreffen. Die Gründe dafür dürften wohl in der besseren Performance von Git und der breiten Akzeptanz von GitHub sein. Zusätzlich ist es auch teilweise mühsam, mehrere Clients installiert haben zu müssen (bei einigen ist eine Unterstützung des jeweils anderen DVCS in Vorbereitung, sonst wäre mir SmartGit/Hg bekannt). Wer nun von Mercurial auf Git wechseln möchte bekommt in diesem Beitrag eine Schritt für Schritt Anleitung.

Prerequisits (Mercurial -> Git)

Folgende Werkzeuge und Erweiterungen kamen zum Einsatz:

Als Mercurial-Client wird TortoiseHg verwendet. Dieser Client lässt sich einfach erweitern, was auch für dieses Vorhaben notwendig ist. Als Erweiterung dazu wird hg-git benötigt. Die Installation und Einrichtung sieht wie folgt aus:

  1. Als ZIP herunter laden und in ein beliebiges Verzeichnis entpacken
  2. Via TortoiseHg die Einstellungen für das zu konvertierende Repository öffnen
  3. hg-git als Erweiterung eintragen

Der Eintrag wird direkt in der Datei hgrc vorgenommen und soll wie folgt aussehen:

[extensions]
hggit=C:\Temp\hg-git\hggit

Hier ist natürlich der tatsächliche Pfad einzusetzen. Damit die Erweiterung verwendet wird, müssen alle offenen TortoiseHg-Anwendungen geschlossen werden.

hg-git hat neben der Abhängigkeit zu Mercurial (diese ist durch die Installation von TortoiseHg als erfüllt anzusehen) eine weitere zu dulwich. Hier ist das entweder das ZIP herunter zu laden, oder das Repository zu klonen. Im Root-Verzeichnis befindet sich ein Verzeichnis dulwich. Dieses Verzeichnis muss nun den Libraries von TortoiseHg hinzugefügt werden. Diese befinden sich üblicherweise in:

%ProgramFiles%\TortoiseHg\library.zip

So muss das dann innerhalb der ZIP-Datei aussehen:

TortoiseHg Libraries

Damit sind alle Vorarbeiten abgeschlossen und es kann mit der Konvertierung gestartet werden.

Und natürlich muss Git installiert sein. Hierbei ist unerheblich welche Implementierung. Wer beispielsweise GitHub for Windows installiert hat, ist bereits bestens gerüstet, sonst kann auch git-scm.com/ verwendet werden.

Aus Mercurial mach Git

In den nächsten Schritten werden wir ein bestehendes Mercurial-Repository in ein Git-Repository konvertieren. Hierzu sind folgende Schritte notwendig:

  1. Git-Bash öffnen (dieser Schritt ist notwendig, damit die hg-git-Erweiterung angezogen wird)
  2. Ein leeres Git-Repository anlegen (hier wird durch die Erweiterung ein Pack-File eingespielt). Dazu ein Verzeichnis an beliebiger Stelle anlegen und folgenden Befehl innerhalb dieses Verzeichnisses ausführen:
    git init –bare
  3. Nun ist ins Mercurial-Repository zu wechseln und dieses in das Git-Repository zu pushen (zu beachten ist, dass dieser Vorgang durchaus recht lange dauern kann, es werden keine Konsolen-Ausgaben geschrieben, daher nicht abbrechen, sondern warten; Es erfolgt jedoch schlussendlich eine Meldung wie viele Commits etc. übernommen wurden):
    hg push path/to/Git-Repository
  4. Im Git-Repository liegt nun unter objects/pack ein Git-Pack-File, welches alle notwendigen Informationen enthält.

Damit ist die Migration eigentlich abgeschlossen, sofern man mit dem Pack-File zufrieden ist. Ist dies nicht der Fall, kann man mit den folgenden beiden Schritten alle Objekte in separaten Dateien ablegen:

  1. Ein weiteres Verzeichnis anlegen und in dieses wechseln
  2. git clone -l path/to/Git-Pack-Repository ausführen. Dabei ist nicht das Pack-File zu referenzieren, sondern das Repository-Stammverzeichnis

Damit ist nun ein Git-Repository mit allen Objekten als separate Dateien vorhanden und kann für weitere Schritte verwendet werden.

Fazit

Die Migration kostet zwar ein wenig Zeit (vor allem, wenn man sich die einzelnen Schritte und Lösungen für einige Fallen zusammensuchen muss), geht aber sonst weitestgehend problemlos von Statten. Nach dem Umstieg steht die gesamte Historie zur Verfügung und es kann wie mit Git gewohnt gearbeitet werden.

Veröffentlicht von Norbert Eder

Ich bin ein leidenschaftlicher Softwareentwickler. Mein Wissen und meine Gedanken teile ich nicht nur hier im Blog, sondern auch in Fachartikeln und Büchern.

Schreibe einen Kommentar

Deine E-Mail-Adresse wird nicht veröffentlicht. Erforderliche Felder sind mit * markiert

Cookie-Einstellungen
Auf dieser Website werden Cookie verwendet. Diese werden für den Betrieb der Website benötigt oder helfen uns dabei, die Website zu verbessern.
Alle Cookies zulassen
Auswahl speichern
Individuelle Einstellungen
Individuelle Einstellungen
Dies ist eine Übersicht aller Cookies, die auf der Website verwendet werden. Sie haben die Möglichkeit, individuelle Cookie-Einstellungen vorzunehmen. Geben Sie einzelnen Cookies oder ganzen Gruppen Ihre Einwilligung. Essentielle Cookies lassen sich nicht deaktivieren.
Speichern
Abbrechen
Essenziell (1)
Essenzielle Cookies werden für die grundlegende Funktionalität der Website benötigt.
Cookies anzeigen