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?
git
ist weitaus besser alshg
, oder?Antworten:
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.
quelle
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:
Es scheint jedoch nicht bidirektional zu funktionieren (siehe Issue-Tracker ).
quelle
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:
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-cinnabar
intern 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-cinnabarquelle
hg-git kann anscheinend verwendet werden, um lokal mit git zu arbeiten, mit einem entfernten Quecksilber-Repo: http://traviscline.com/blog/2010/04/27/using-hg-git-to-work-in-git-and -push-to-hg /
Verpassen Sie auch dort nicht die Kommentare.
quelle
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.
quelle
git-remote-hg
mit der Impedanzfehlanpassung zwischen hg-Zweigen und git-Zweigen um ( Einzelheiten finden Sie in meiner Antwort unter stackoverflow.com/a/11223644/334451 )?git-remote-hg
Importiert 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.Es gibt ein neues Projekt, das genau das erreicht:
Es macht die Zwei-Wege-Sache gut integriert.
quelle
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.
quelle