726 Stimmen

Was ist der Unterschied zwischen Mercurial und Git?

Ich verwende Git schon seit einiger Zeit unter Windows (mit msysGit) und ich mag die Idee der verteilten Quellcodekontrolle. Vor kurzem habe ich mir Mercurial (hg) angeschaut und es sieht interessant aus. Allerdings kann ich die Unterschiede zwischen hg und git nicht ganz nachvollziehen.

Hat jemand einen direkten Vergleich zwischen git und hg gemacht? Ich würde gerne wissen, was hg und git unterscheidet, ohne in eine Fanboy-Diskussion zu geraten.

345voto

jfs Punkte 16666

Diese Artikel können helfen:

bearbeiten : Es scheint ein Trend zu sein, Git und Mercurial mit Berühmtheiten zu vergleichen. Hier ist noch einer:

237voto

Martin Geisler Punkte 71257

Ich arbeite mit Mercurial, aber ich glaube, dass beide Systeme im Grunde gleichwertig sind. Sie arbeiten beide mit den gleichen Abstraktionen: eine Reihe von Schnappschüssen (Changesets), die die Historie ausmachen. Jeder Änderungssatz weiß, woher er stammt (der übergeordnete Änderungssatz) und kann viele untergeordnete Änderungssätze haben. Der jüngste hg-git Erweiterung bietet eine bidirektionale Brücke zwischen Mercurial und Git und zeigt diesen Punkt auf.

Git hat einen starken Fokus auf die Veränderung dieses Verlaufsgraphen (mit allen Konsequenzen, die das mit sich bringt), während Mercurial das Umschreiben des Verlaufs nicht fördert, aber es ist trotzdem leicht zu machen und die Konsequenzen, die sich daraus ergeben, sind genau so, wie Sie sie erwarten sollten (d.h. wenn ich einen bereits vorhandenen Änderungssatz ändere, wird Ihr Client ihn als neu ansehen, wenn Sie ihn von mir abrufen). Mercurial hat also eine Vorspannung in Richtung nicht-destruktiver Befehle.

Was die leichtgewichtigen Zweige betrifft, so hat Mercurial Repositories unterstützt mit mehrere Filialen seit..., immer, denke ich. Git-Repositories mit mehreren Zweigen sind genau das: mehrere voneinander abweichende Entwicklungsstränge in einem einzigen Repository. Git fügt diesen Strängen dann Namen hinzu und ermöglicht es Ihnen, diese Namen aus der Ferne abzufragen. Die Lesezeichen Erweiterung für Mercurial fügt lokale Namen hinzu, und mit Mercurial 1.6 können Sie diese Lesezeichen verschieben, wenn Sie schieben/ziehen.

Ich verwende Linux, aber anscheinend ist TortoiseHg schneller und besser als das Git-Äquivalent unter Windows (aufgrund der besseren Nutzung des schlechten Windows-Dateisystems). Beide http://github.com y http://bitbucket.org bieten Online-Hosting, der Service bei Bitbucket ist großartig und reaktionsschnell (ich habe Github nicht ausprobiert).

Ich habe mich für Mercurial entschieden, weil es sich sauber und elegant anfühlt - die Shell/Perl/Ruby-Skripte, die ich mit Git bekommen habe, haben mich abgeschreckt. Werfen Sie einen Blick auf die git-instaweb.sh Datei wenn Sie wissen wollen, was ich meine: es ist ein Shell Skript, das eine Rubinrot Skript, das, wie ich glaube, einen Webserver betreibt. Das Shell-Skript erzeugt ein weiteres Shell-Skript, um das erste Ruby-Skript zu starten. Außerdem gibt es ein wenig Perl , und das ist gut so.

Ich mag die Blog-Beitrag der Mercurial und Git mit James Bond und MacGyver vergleicht - Mercurial ist irgendwie unauffälliger als Git. Ich habe den Eindruck, dass die Leute, die Mercurial benutzen, nicht so leicht zu beeindrucken sind. Dies spiegelt sich darin wider, wie jedes System das tut, was Linus als "Der coolste Zusammenschluss aller Zeiten!" . In Git können Sie mit einem nicht verwandten Repository zusammenführen, indem Sie dies tun:

git fetch <project-to-union-merge>
GIT_INDEX_FILE=.git/tmp-index git-read-tree FETCH_HEAD
GIT_INDEX_FILE=.git/tmp-index git-checkout-cache -a -u
git-update-cache --add -- (GIT_INDEX_FILE=.git/tmp-index git-ls-files)
cp .git/FETCH_HEAD .git/MERGE_HEAD
git commit

Diese Befehle sehen in meinen Augen ziemlich obskur aus. In Mercurial tun wir das:

hg pull --force <project-to-union-merge>
hg merge
hg commit

Beachten Sie, dass die Mercurial-Befehle einfach und überhaupt nicht speziell sind - das einzig Ungewöhnliche ist die --force Flagge zu hg pull Dies ist notwendig, da Mercurial sonst abbricht, wenn Sie von einem nicht verwandten Repository ziehen. Es sind Unterschiede wie diese, die Mercurial in meinen Augen eleganter erscheinen lassen.

73voto

Aristotle Pagaltzis Punkte 106298

Git ist eine Plattform, Mercurial ist "nur" eine Anwendung. Git ist eine Plattform für versionierte Dateisysteme, die zufällig mit einer DVCS-Anwendung ausgeliefert wird, aber wie bei Plattformanwendungen üblich, ist sie komplexer und hat mehr Ecken und Kanten als fokussierte Anwendungen. Das bedeutet aber auch, dass das VCS von Git ungeheuer flexibel ist, und es gibt eine riesige Anzahl von Dingen, die man mit Git machen kann, die nicht zur Quellcodekontrolle gehören.

Das ist der Kern des Unterschieds.

Git lässt sich am besten von Grund auf verstehen - vom Repository-Format aufwärts. Scott Chacons Git-Talk ist eine hervorragende Grundlage für diese Arbeit. Wenn Sie versuchen, Git zu benutzen, ohne zu wissen, was unter der Haube passiert, werden Sie irgendwann verwirrt sein (es sei denn, Sie beschränken sich auf die grundlegenden Funktionen). Das mag dumm klingen, wenn Sie nur ein DVCS für Ihre tägliche Programmierroutine wollen, aber das Geniale an Git ist, dass das Repository-Format eigentlich sehr einfach ist und Sie kann die gesamte Funktionsweise von Git recht einfach verstehen.

Für einige eher technisch orientierte Vergleiche sind die besten Artikel, die ich persönlich gesehen habe, die von Dustin Sallings:

Er hat beide DVCSs ausgiebig benutzt und versteht beide gut - und bevorzugt schließlich Git.

51voto

mmiika Punkte 9462

Der große Unterschied besteht unter Windows. Mercurial wird nativ unterstützt, Git nicht. Sie können ein sehr ähnliches Hosting erhalten wie github.de mit bitbucket.org (sogar noch besser, da Sie ein kostenloses privates Repository erhalten). Ich habe eine Zeit lang msysGit verwendet, bin dann aber zu Mercurial gewechselt und bin sehr zufrieden damit.

38voto

Maurice Flanagan Punkte 5081

Wenn Sie ein Windows-Entwickler sind, der eine einfache, nicht verbundene Revisionskontrolle sucht, sollten Sie Hg verwenden. Ich fand Git unverständlich, während Hg einfach und gut in die Windows-Shell integriert ist. Ich lud Hg herunter und folgte dieses Lernprogramm (hginit.com) - Zehn Minuten später hatte ich ein lokales Repo und konnte wieder an meinem Projekt arbeiten.

CodeJaeger.com

CodeJaeger ist eine Gemeinschaft für Programmierer, die täglich Hilfe erhalten..
Wir haben viele Inhalte, und Sie können auch Ihre eigenen Fragen stellen oder die Fragen anderer Leute lösen.

Powered by:

X