Git als Mercurial Client? Warum kein git-hg?

74

Das ist eine Frage, die mich schon eine Weile beschäftigt. Ich habe meine Hausaufgaben gemacht und den Stackoverflow überprüft und mindestens diese beiden Themen zu meiner Frage gefunden: Git für Mercurial wie git-svn und Git-Interoperabilität mit einem Mercurial-Repository

Ich habe ernsthaft gegoogelt, um dieses Problem zu lösen, aber bisher ohne Glück. Ich habe auch das Buch Git Internals und das Mercurial Definitive Behind the Scenes gelesen , um dies herauszufinden. Ich bin immer noch ein bisschen verwirrt, warum ich keinen geeigneten Git-HG-Typ eines Werkzeugs finden konnte.

Aus meiner Sicht ist git-svn eines der Hauptmerkmale, weshalb ich mich dafür entschieden habe, git auch bei der Arbeit über mercurial zu verwenden. Es ermöglicht mir, einen Workflow zu verwenden, den ich mag, und niemand anderes muss sich darum kümmern, wenn es ihn nicht interessiert. Ich sehe keinen Sinn darin, das Zwischen-HG-Repo zum Hin- und Herkonvertieren zu verwenden, wie in einer der Ketten vorgeschlagen.

Nach allem, was ich gelesen habe, scheinen hg und git in der Konzeption sehr ähnlich zu sein. Es gibt Unterschiede unter der Haube , aber keine davon sollte verhindern, dass ein Git-Client für hg erstellt wird. Wie es mir scheint, machen Remote-Tracking-Zweige und Octopus-Merges Git noch leistungsfähiger als hg.

Also, die eigentliche Frage, gibt es einen wirklichen Grund, warum git-hg nicht existiert (oder zumindest sehr schwer zu finden ist)? Gibt es eine gewisse Feindseligkeit von Git-Benutzern (und Entwicklern) gegenüber ihren hg-Kollegen, die das Fehlen des git-hg-Tools verursacht hat? Hat jemand von euch Pläne, so etwas zu entwickeln und damit an die Öffentlichkeit zu gehen? Ich könnte mich freiwillig melden (obwohl mit sehr schwachen C-Kenntnissen), um daran teilzunehmen. Ich besitze einfach nicht das volle Wissen, um dies selbst zu starten.

Könnte dies das Werkzeug sein, um alle DVCS-Kriege endgültig zu beenden?

Kai Inkinen
quelle
36
@pajton: oder weil gitist weitaus besser als hg, oder?
Cascabel
4
git-hg existiert (jetzt). stackoverflow.com/questions/5225666/…
Matt Ball

Antworten:

18

hg-git und die Pycon-Präsentation des Autors erläutern seine Einstellung zur Situation. Ich bin mir nicht sicher, ob Sie beim Googeln auf diese gestoßen sind, aber sie haben meine Fragen beantwortet.

Tom Willis
quelle
6
Hat jemand eine Abschrift davon?
jk.
2
Tolle Präsentation! Informativ und lustig anzusehen. Ich hatte das vorher noch nie gesehen, da ich es vermeide, Videos online anzuschauen. Leider bin ich mit der Antwort immer noch nicht zufrieden. Wenn die Funktionalität bereits vorhanden ist, warum nicht den ganzen Weg? Ich muss es mit hggit versuchen, aber vielleicht sollte ich eine E-Mail an die Bitbucket-Jungs werfen ...
Kai Inkinen
2
Nun, ich konnte hg-git noch nicht ausprobieren, aber wenn ich es richtig verstanden habe, ist es immer noch mehr als ein Schritt, von git zu hg zu wechseln. Auch der Satz über einige Leute, die das Bare-Git-Verzeichnis verwenden, klang nicht besonders beruhigend. Git-svn funktioniert einfach. Selbst in einem Ausmaß, in dem SVN als Git-Backend eine gute Option zu sein scheint. Zumindest aus der Präsentation habe ich herausgefunden, dass git-hg noch ein paar Schritte davon entfernt ist. Beachten Sie, dass ich nicht vorschlage, dass es kein großartiges Projekt ist. Ich habe nur das Gefühl, dass noch etwas Arbeit übrig ist.
Kai Inkinen
5
Leicht zu folgen oder nicht, sicherlich dauert es keine Stunde, um die Frage zu beantworten. Ein tl; dr wäre nett.
Mu Mind
3
tl; dr: Sie brauchen git-hg nicht, weil hg-git auf dem "Server" es dem Client ermöglicht, ohne Erweiterungen von einem hg-Repo zu pushen und zu ziehen! Anweisungen finden Sie in der Antwort von Thomas Broyer unten.
Nilzor
20

Ich habe das nicht ausprobiert, aber es scheint ein Git-HG- Projekt zu geben. Das Projekt beschreibt sich auf der Seite und in der README als:

Ein git-hg-Dienstprogramm zum Auschecken und Verfolgen eines Quecksilber-Repos.

Eine Reihe von Skripten zum Auschecken und Verfolgen eines Mercrial-Projekts.

Es scheint jedoch nicht bidirektional zu funktionieren (siehe Issue-Tracker ).

Akaihola
quelle
1
Es scheint, dass jemand anderes das bereits hinzugefügt hat. Schauen Sie sich diese Gabel an .
Albert
14
Ich bin der ursprüngliche Autor von git-hg. Es ist wirklich nur eine Reihe von Shell-Wrappern rund um den schnellen Export, die ich zum Verfolgen eines Remote-HG-Repos verwendet habe. Wie von Albert angegeben, hat jemand Push-Unterstützung hinzugefügt, und ich habe diese Gabel heute gerade zusammengeführt. Aus irgendeinem Grund muss ich E-Mail-Benachrichtigungen von GitHub verpasst haben, da ich vor einigen Wochen zwei Pull-Anfragen geöffnet hatte, die ich bis heute nicht bemerkt habe.
Cosmin Stejerean
1
Wie ich hier ausführlich erläutere , scheint die Methode, die Git-Hg zum Pushing auf Mercurial verwendet, in der Praxis nicht verwendbar zu sein. Ich habe Cosmin schon davon erzählt; Ich poste diesen Kommentar nur hier, um anderen zu helfen, die am Ende über dieselben Suchpfade wie ich den Weg zu diesen Tools finden.
Dubiousjim
@dubiousjim: Der von Ihnen angegebene Link erklärt nichts im Detail. Veralteter Link?
Nilzor
18

Es gibt ein anderes Projekt, um dies zu realisieren: git-remote-hg. Tatsächlich zwei davon, eine native (siehe https://github.com/msysgit/msysgit/wiki/Guide-to-git-remote-hg ) und eine andere, die auf hg-git basiert (siehe https: // github. com / rfk / git-remote-hg ). Ersteres ist viel schneller als Letzteres, aber noch unvollständig und in der Entwicklung.

Es gibt tatsächlich Git-Remote-Helfer (wie diese Tools genannt werden) für andere Systeme, entweder bereits vorhanden oder in der Entwicklung. Dies beinhaltet Unterstützung für Subversion, CVS, Basar und sogar MediaWiki.

Das Klonen eines Mercurial-Repositorys über git erfolgt dann einfach wie folgt:

git clone hg::https://hg.example.com/some-mercurial-repo

UPDATE: Inzwischen gibt es einen dritten, ebenfalls "einheimischen", nämlich den von Felipe, den er in seiner Antwort hier erwähnt. Dies sieht so aus, als ob es bald Teil des Git-Beitragsverzeichnisses sein könnte: https://github.com/felipec/git-remote-hg Es funktioniert, ohne dass Patches erforderlich sind, um sich selbst zu git, obwohl einige Patches zu git sind (werden derzeit überprüft ) kann angewendet werden, um die allgemeine Benutzererfahrung zu verbessern.

UPDATE 2: Und jetzt gibt es noch einen weiteren Anwärter, der sich in einer ziemlich aktiven Entwicklung befindet und auf dem Code von felipe basiert: https://github.com/buchuki/gitifyhg - er funktioniert bisher recht gut für mich, aber es gibt ihn noch einige raue Stellen.

UPDATE 3: Sowohl gitifyhg als auch Felipes git-remote-hg werden derzeit nicht aktiv gewartet. Vorerst habe ich eine Form von Felipes Code mit einigen Korrekturen erstellt, einschließlich einiger, damit er mit den neuesten Mercurial-Versionen funktioniert. Sie können es von https://github.com/fingolfin/git-remote-hg erhalten . Schließlich gibt es noch einen weiteren Konkurrenten, der git-cinnabarintern einen völlig anderen Ansatz verwendet (wenn Sie sich jedoch nicht darum kümmern, ist die Verwendung mehr oder weniger dieselbe wie bei den anderen git-remote-hg-Implementierungen). Ich habe es selbst noch nicht ausprobiert, aber Sie finden es unter https://github.com/glandium/git-cinnabar

Max
quelle
1
Auf der pycon 2013 klang der Autor von gitifyhg ziemlich zuversichtlich. Es heißt, dass es unter Windows nicht getestet wurde, also probiere ich das jetzt aus.
Epu
gitifyhg ist eigentlich eine Abzweigung von git-remote-hg, und ich glaube auch nicht, dass hg-git erforderlich ist (sie verwenden Mercurial-Python-Module direkt). Die Crew, die an gitifyhg arbeitet, scheint eher auf Fehlerberichte zu reagieren als der Typ, der ursprünglich git-remote-hg entwickelt hat, also bin ich zu gitifyhg übergegangen.
Paul Price
5

Jemand hat bereits zwei Git-Remote-HGs erwähnt, aber hier ist eine neue:

Brückenunterstützung in Git für Quecksilber und Basar

Es hat mehr Funktionen und sollte zuverlässiger funktionieren als das msysgit, aber am wichtigsten; Sie benötigen keine Abhängigkeiten oder einen benutzerdefinierten Git-Build. Kopieren Sie einfach in Ihren $ PATH , und das war's.

Es wurden umfangreiche Tests durchgeführt, um zu überprüfen, ob die Ausgabe genau mit hg-git übereinstimmt. Daher sollte sie mindestens genauso gut funktionieren.

FelipeC
quelle
Wie geht man git-remote-hgmit der Impedanzfehlanpassung zwischen hg-Zweigen und git-Zweigen um ( Einzelheiten finden Sie in meiner Antwort unter stackoverflow.com/a/11223644/334451 )?
Mikko Rantalainen
1
git-remote-hgImportiert sowohl benannte Zweige als auch Lesezeichen aus Mercurial. Da Lesezeichen mit Git-Zweigen identisch sind, erhält ein 'foo'-Lesezeichen einen' foo'-Zweig in Git. Ein 'bar' namens branch erhält jedoch einen 'branch / bar'-Zweig in Git. Wenn Sie etwas über diesen Zweig drücken, erhalten alle diese Commits die Bezeichnung "Leiste", sodass sie in der benannten Zweigstelle "Leiste" landen. Darüber hinaus gibt es einen hg-git-Kompatibilitätsmodus, in dem wir genau dasselbe tun wie hg-git und am Ende eines Commits, der den benannten Mercurial-Zweig angibt, zusätzlichen Code hinzufügen. Es gehen also überhaupt keine Informationen verloren.
FelipeC
3

Es gibt ein neues Projekt, das genau das erreicht:

Es macht die Zwei-Wege-Sache gut integriert.

abourget
quelle
1
Cool. muss es überprüfen. Obwohl es in letzter Zeit immer mehr zu dem Gefühl kommt, dass immer mehr Projekte auf Git umgestellt werden und Quecksilber weniger interessant wird. Vielleicht ist es nur meine Perspektive, aber immer noch ...
Kai Inkinen
Danke für dieses Tool. Ich stellte eine detaillierte Diskussion davon hier (siehe insbesondere die „Evaluation“ Seite).
Dubiousjim
2
Die Lösung von felipec ist jetzt in Git integriert und funktioniert
einwandfrei. Daher
2

Ich denke, es gibt wirklich nicht viel Anreiz, einen zu schaffen. Niemand wird schrecklich verkrüppelt sein, wenn er einen über den anderen benutzen muss; Sie sind beide DVCS. Sicher, jeder hat wahrscheinlich seine Präferenz, aber sie werden es im Allgemeinen einfach aufsaugen und den anderen benutzen, wenn sie müssen. Ich gehe davon aus, dass hg-git entstanden ist, weil git sehr weit verbreitet ist, während weit weniger Projekte hg übernommen haben.

Wenn in einem Projekt svn oder cvs verwendet wird, wird jeder, der DVCS probiert hat, verletzt sein - und er wird das Dienstprogramm git-svn / hg-svn wollen. Es gibt immer noch viele Projekte, die cvs / svn verwenden, also viel Nachfrage.

Sie haben wahrscheinlich Recht, dass es eine nützliche Sache wäre, wenn man annimmt, dass einer der beiden sich nicht langsam gegen den anderen durchsetzt (Git hat wirklich eine viel größere Nutzerbasis, glaube ich).

Sie haben auch Recht, dass es keine großen technischen Hindernisse gibt - hg-git ist bidirektional, sodass es eindeutig möglich ist, die Informationen zwischen den beiden abzubilden.

Cascabel
quelle
4
Aus meiner Erfahrung gewinnt Git auf dem Gebiet viel Aufmerksamkeit, aber bisher wählen viele Unternehmen, die ich beraten habe, Quecksilber anstelle von Git. Der Grund ist meistens, dass Quecksilber für jemanden mit SVN / CVS-Hintergrund leichter zu erfassen ist, was etwa 99% aller Entwickler entspricht. Dies bedeutet, dass viele kommerzielle VCS in Quecksilber umgewandelt werden, was Git effektiv ausschließt. Für jeden, der git verwendet, ist es aufgrund von git-svn besser, den Server als SVN zu behalten. Dies zu entwickeln könnte wirklich ein guter PR-Stunt für Git sein und daher für Git-Entwickler interessant sein, stimmst du nicht zu?
Kai Inkinen
3
@ Aapeli: Interessant. Ich habe nicht befragt, aber mein Arbeitsplatz verwendet Git, und unter freien Softwareprojekten scheint Git viel beliebter zu sein. Es ist sehr bedauerlich (aber nicht überraschend), dass Unternehmen den einfachen Übergang von cvs / svn als Hauptgrund verwenden - in einer idealen Welt würden sie nur die auswählen, die für ihre Anforderungen besser ist, und von den Entwicklern erwarten, dass sie lernen, sie zu verwenden . Und es ist wahr, alles, um Git weiter zu verbreiten, wäre gut für das Projekt - aber die überwältigende Unterstützung in der Welt der freien Software wird wahrscheinlich immer ein ausreichender Erfolg sein, um die Zukunft von Git zu sichern.
Cascabel
4
Ich würde vermuten, dass viele Windows-Läden aufgrund von wahrgenommenen Problemen mit der Windows-Unterstützung von Git hg über Git wählen
jk.
2
Vor mindestens einem Jahr, als wir diese Art der Bewertung für ein Unternehmen durchführten, das Java durchführte, stellten wir fest, dass es immer noch viele Dinge gab, die im Vergleich zu Quecksilber minderwertig waren. Einige der wichtigsten waren keine oder schlechte Unterstützung für IDE- und CI-Umgebungen. Die Hauptwerkzeuge waren Netbeans, Eclipse und Hudson. Diese wirken sich direkt auf die Produktivität aus. Windows war in diesem Fall weder ein Problem noch in einer Reihe anderer ähnlicher Fälle, von denen ich gehört habe. Zumindest hat sich die Situation jetzt verbessert, denke ich.
Kai Inkinen
@aapeli: Ich denke das macht Sinn. Ich weiß, dass ich in all diesen Dingen eine wirklich idealistische Einstellung habe. Ich halte IDE-Schnittstellen nicht wirklich für wichtig - wenn Sie sich die Zeit nehmen, die Befehle zu lernen, funktioniert die Befehlszeilenschnittstelle einwandfrei, und Sie werden am Ende besser wissen, wie Git tatsächlich funktioniert. Was CI betrifft ... meine Einstellung ist, dass Sie das VCS mit den gewünschten Funktionen auswählen und dann ein Plugin für Ihr CI-Tool schreiben sollten, wenn Sie müssen. Es ist nicht so, dass Sie wirklich ausgefeilte VCS-Operationen benötigen, um Checkout Build Clean usw. zu klonen
Cascabel