it-swarm.com.de

Mercurial-Ordner in ein Git-Repository konvertieren

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

Ich würde gerne einen bestimmten Mercurial-Ordner/eine bestimmte Datei in einem Git-Repository spiegeln. Was ich eigentlich versuche, ist, den Verlauf einer Datei aus einem Mercurial-Repository nach Git zu exportieren und dies mit zukünftigen Commits synchronisieren zu können.

Haben Sie einen Vorschlag, wie Sie vorgehen sollen? Ich bin der Meinung, dass der Weg dahin gehen sollte, um die Geschichte des Mercurial-Patches abzurufen, jeden Commit regelmäßig als Patch zu exportieren und die Mercurial-Patches auf das Git-Repository anzuwenden.

115
Simone Carletti

Versuchen Sie es mit Fast 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
115
Yohann

Hg-Git-Erweiterung

Hg-Git kann verwendet werden, um ein Mercurial-Repository in Git zu konvertieren. 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 Repositories.

  1. Installiere Hg-Git.

    • Unter Windows wird TortoiseHg mit Hg-Git geliefert, obwohl Sie aktivieren müssen über das Einstellungswerkzeug (im Erweiterungsbereich)

       TortoiseHg Settings

      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 Lesezeichen hg ist erforderlich, um Probleme zu vermeiden, da andernfalls hg-git den gerade ausgecheckten Zweig verwirrt. Dadurch wird im Git-Repository ein Zweig mit dem Namen hg erstellt. Um die Änderungen in master zu erhalten, verwenden Sie die folgenden Befehle (nur im ersten Durchlauf erforderlich, verwenden Sie später einfach git merge oder rebase):

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

Sie können (von Mercurial Seite):

  • using Convert extension mit der Option --filemap konvertiert einen Teil des ursprünglichen Repos in kleinere Verzeichnisse
  • mit hg-git-Erweiterung Verschieben Sie das Repo auf Git

oder (anstelle von hg-git) mit Mercurial bridge in Git , clone | pull repository aus Git

12
Lazy Badger

Gitify

Scheint eine modernere und einfachere Alternative für die Konvertierung zu sein 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
9
sorin

Ich habe mir genau beschrieben, wie das geht: Mit Mercurial zu GitHub . Ich verwende diese Technik seit über einem Jahr, um mehrere Mercurial-Repositories zu GitHub zu verschieben, ohne Probleme.

2
glyphobet

hg-git-fast-import

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

Ein weiteres Dienstprogramm mit den folgenden Funktionen:

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

Sie können Binärdateien für Sie herunterladen Plattform und sie irgendwo im Pfad ablegen oder mit cargo installieren (vorausgesetzt, Rust muss 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 muss nicht Python und Mercurial installiert werden. Die erweiterte Konfiguration ermöglicht das Ersetzen von Autoren oder Zweigen, das Voranstellen von Zweigen und mehr.

0

Unter Windows kann es etwas schwierig sein. Nachdem Sie die richtigen Plugins in Mercurial (hggit) aktiviert haben, kann TortoiseHG ebenfalls verwendet werden. 

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

    % hg bookmarks hg

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

0
Ivasan