it-swarm.com.de

Git Interoperabilität mit einem Mercurial Repository

Ich benutze GIT auf einem Mac. Genug gesagt. Ich habe die Werkzeuge, ich habe die Erfahrung. Und ich möchte es weiterhin benutzen. Keine Kriege hier ...

Das Problem ist immer die Interoperabilität. Die meisten Leute benutzen SVN, was für mich großartig ist. Git SVN funktioniert sofort und ist eine schnörkellose Lösung. Die Leute können SVN weiterhin gerne nutzen und ich verliere weder meinen Workflow noch meine Tools.

Nun ... Einige Leute kommen mit Mercurial. Gut für sie: Sie haben ihre Gründe. Aber ich kann kein GIT HG sofort finden. Ich möchte nicht zu HG wechseln, aber ich muss trotzdem mit ihrem Repository zusammenarbeiten.

Kennt jemand von euch eine einfache Lösung dafür?

193

Es gibt eine neue Git-Remote-HG, die native Unterstützung bietet:

Bridge-Unterstützung in Git für Mercurial und Bazaar

Kopiere einfach git-remote-hg auf deinen $ PATH, mache ihn ausführbar und das war's, keine Abhängigkeiten (außer Mercurial):

git clone hg::https://www.Mercurial-scm.org/repo/hg/

Sie sollten in der Lage sein, darauf zuzugreifen, als wäre es ein natives Git-Repository.

Wenn Sie neue Git-Zweige verschieben, werden Mercurial-Lesezeichen für diese erstellt.

Weitere Informationen finden Sie im git-remote-hg wiki .

113
FelipeC

Sie sollten in der Lage sein, hg-git zu verwenden.

hg clone <hg repository>

edit ~/.hgrc und füge hinzu:

[extensions]
hgext.bookmarks =
hggit =

erstelle ein Lesezeichen, damit du ein master in git hast:

cd <repository>
hg bookmark -r default master

edit .hg/hgrc im Repository und füge hinzu:

[git]
intree = true

jetzt können Sie das Git-Repository erstellen:

hg gexport

und Sie können das resultierende Verzeichnis als Git-Klon verwenden. von Mercurial zu ziehen wäre:

hg pull
hg gexport

und drängen auf Mercurial:

hg gimport
hg Push

(Ja, Sie müssen hg mit diesem Workflow verwenden, aber Ihr Hacking wird alles in git sein.)

P.S. Wenn Sie ein Problem mit diesem Workflow haben, melden Sie bitte einen Fehler.

105

Du kannst es versuchen hg2git, das python script ist und Teil des Fast-Exports, den Sie unter http://repo.or.cz/w/fast-export.git .

Sie müssen jedoch Mercurial installiert haben.

15
sykora

Da hg-git eine zwei - Wegbrücke ist, können Sie auch Changesets von Git nach Mercurial pushen.

9
Martin Geisler

Hg-Git Mercurial Plugin . Ich habe es nicht selbst ausprobiert, könnte aber einen Blick wert sein.

6
ralphtheninja

Ich hatte großen Erfolg mit git-hg Von https://github.com/cosmin/git-hg (erfordert auch eine funktionierende Installation von hg). Es unterstützt holen, ziehen und Drücken und ist für mich stabiler als hg-git (ähnliche Funktionen von hg bis git).

Siehe https://github.com/cosmin/git-hg#usage für Anwendungsbeispiele. Die Benutzeroberfläche ist sehr ähnlich zu git-svn.

Der git-hg Benötigt zusätzlichen Speicherplatz für jedes geklonte hg repo. Die Implementierung verwendet einen vollständigen Mercurial-Klon, einen zusätzlichen git-Bare-Klon und das eigentliche git-Repo. Der benötigte Speicherplatz beträgt ungefähr das Dreifache der normalen Nutzung von git only. Die zusätzlichen Kopien werden wie gewohnt unter dem Verzeichnis .git Ihres Arbeitsverzeichnisses (oder dem mit GIT_DIR Gekennzeichneten Speicherort) gespeichert.

Hinweis: Das Grundproblem, das git-hg Zu lösen versucht, besteht darin, dass zwischen git und keine 1: 1-Zuordnung besteht hg Funktionen. Das größte Problem ist die Impedanzfehlanpassung zwischen Git-Zweigen und hg unbenannten Zweigen und hg benannten Zweigen und hg Lesezeichen (alle von denen sehen für git Benutzer sehr nach Zweigen aus). Ein verwandtes Problem ist, dass hg versucht, den ursprünglich benannten Verzweigungsnamen im Versionsverlauf zu speichern, im Gegensatz zu git, bei dem der Verzweigungsname standardmäßig nur zur Vorlage-Festschreibungsnachricht hinzugefügt wird.

Jedes Tool, das behauptet, eine interoperable Brücke zwischen git und hg zu schaffen, sollte erklären, wie es mit dieser Impedanzanpassung umgeht. Sie können dann entscheiden, ob die ausgewählte Lösung Ihren Anforderungen entspricht.

Die Lösung, die git-hg Verwendet, besteht darin, alle hg-Lesezeichen zu verwerfen und benannte Zweige in Git-Zweige umzuwandeln. Außerdem wird der Git-Master-Zweig auf den unbenannten Standard-HG-Zweig gesetzt.

6

Habe hggit ausprobiert. Funktioniert für mich, da ich die Arbeit von Männern und Frauen verkraften muss. Vor allem für Bewertungen ist dies super.

Ein kleines Problem/eine Warnung zu diesem Thema:

Ich habe versucht, ein stabiles Linux-Kernel-Repository mit hg zu klonen. Diese Repositorys werden in git verwaltet und enthalten normalerweise eine große Anzahl von Dateien.

Es war sehr langsam. Ich habe 2 Tage gebraucht, um eine Arbeitskopie vollständig zu klonen nd zu aktualisieren.

3
Wizz

Ich habe cosmins git-hg und abourget's git-hg-again versucht Sowohl bei mutt's hg repo scheint es, dass der spätere die Reihenfolge einer Zusammenführung gut respektiert, der erstere ist ein bisschen zufällig. Sie können aus den Screenshots unten sehen.

Ein Merge-Verlaufsdiagramm von Mutt, das von cosmins git-hg importiert wurde:

enter image description here

Ein Merge-Verlaufsdiagramm von mutt, das von git-hg-again von abourget importiert wurde :

enter image description here

Die von hgk auf dem hg-Repository von mutt geplottete aktuelle Verlaufsgrafik:

enter image description here

Wie Sie oben sehen können, ist die zweite Grafik von abourget's git-hg-again sehr nahe an der ursprünglichen hgk-Grafik und spiegelt tatsächlich die reale wider Workflow des Mutt.

Ein Nachteil von git-hg-again ist, dass es keine "hg" -Remote hinzufügt, sondern alle Referenzen als lokale Tags importiert. Git-hg hat eine wunderbare "hg" -Remote, die das vorgelagerte hg-Repo darstellt.

1
weynhamz

Die bidirektionale Synchronisation von hg-git (und git-git, hg-hg) ist auch mit dem Dienst Git-hg Mirror möglich. Es verwendet hg-git (unter anderem) hinter den Kulissen und sein Code ist ebenfalls Open Source.


Haftungsausschluss : Ich bin von der Firma dahinter.

0
Piedone