Wenn ich Vergleiche betrachte, scheint es mir, dass es eine 1: 1-Zuordnung zwischen ihren Funktionssätzen geben könnte. Eine häufig zitierte Aussage ist jedoch, dass "Mercurial einfacher ist". Worauf beruht diese Aussage? (wenn überhaupt)
Wenn ich Vergleiche betrachte, scheint es mir, dass es eine 1: 1-Zuordnung zwischen ihren Funktionssätzen geben könnte. Eine häufig zitierte Aussage ist jedoch, dass "Mercurial einfacher ist". Worauf beruht diese Aussage? (wenn überhaupt)
Antworten:
Beispiel: Nehmen wir an, Sie möchten den Benutzernamen für alle vorherigen Commits ändern. Ich musste das aus verschiedenen Gründen mehrmals tun.
Git Version
git filter-branch --commit-filter '
if [ "$GIT_COMMITTER_NAME" = "<Old Name>" ];
then
GIT_COMMITTER_NAME="<New Name>";
GIT_AUTHOR_NAME="<New Name>";
GIT_COMMITTER_EMAIL="<New Email>";
GIT_AUTHOR_EMAIL="<New Email>";
git commit-tree "$@";
else
git commit-tree "$@";
fi' HEAD
Mercurial Version:
authors.convert.list Datei:
<oldname>=<newname>
Befehlszeile:
hg convert --authors authors.convert.list SOURCE DEST
Nun, welches sieht einfacher zu bedienen aus?
Hinweis: Ich habe 2 Jahre ausschließlich mit Git gearbeitet. Das ist also kein "Ich hasse es, ich habe es nicht in 2 Sekunden bekommen" -Rant.
Für mich ist es die Benutzerfreundlichkeit. Git ist sehr linuxorientiert mit einer Linux-Art, Dinge zu tun. Das bedeutet Befehlszeile, Manpages und es selbst herauszufinden. Es hatte eine sehr schlechte GUI (Anmerkung: Ich habe das von msysGit vor ungefähr einem Jahr aus gemacht), das schien mir nur im Weg zu stehen. Ich konnte es kaum gebrauchen
Die Kommandozeile war schlimmer. Da es sich um ein Linux-orientiertes Programm handelt, war die Verwendung unter Windows sehr schwierig. Anstelle eines einheimischen Ports wurde git einfach mit MinGW (Think Cygwin) verpackt, was die Arbeit damit erheblich erschwerte. MinGW ist keine Windows-Eingabeaufforderung und verhält sich einfach anders. Es ist verrückt, dass dies der einzige Weg ist, mit Git zu arbeiten. Selbst unter Linux schien es die einzige Möglichkeit zu sein, mit einer geraden Befehlszeile zu arbeiten. Projekte wie RabbitVCS halfen einigen, waren aber nicht sehr leistungsfähig.
Der befehlszeilenorientierte Ansatz und die Tatsache, dass es sich um ein Linux-Programm handelt, bedeutete, dass fast alle Anleitungen, Hilfedokumentationen und Forum- / QA-Fragen darauf beruhten, monströse Befehle wie oben auszuführen. Die grundlegenden SCM-Befehle (Festschreiben, Ziehen, Drücken) sind nicht mehr so komplex, und die Komplexität nimmt exponentiell zu.
Ich hasse auch den einen Ort, an dem viele OSS-Git-Benutzer rumhängen: Github. Wenn Sie zum ersten Mal zu einer Github-Seite gehen, werden Sie mit allem belästigt, was Sie tun können. Für mich sieht eine Projekt-Git-Seite chaotisch, beängstigend und übermächtig aus. Sogar die Erklärung, was das Projekt ist, wird nach unten gedrückt. Github schmerzt Leute, die noch keine vollständige Website eingerichtet haben. Der Issue Tracker ist auch schrecklich und verwirrend. Funktionsüberladung.
Git-User schienen auch sehr kultig zu sein. Git-Benutzer scheinen immer diejenigen zu sein, die "Heilige Kriege" beginnen, über die DVCS besser ist, was Mercurial-Benutzer dann zwingt, sich selbst zu verteidigen. Websites wie http://whygitisbetterthanx.com/ zeigen Arroganz und eine fast "Use my software or die" -Mentalität. Oft habe ich verschiedene Orte der Hilfe aufgesucht, nur um nicht X zu kennen, um X vorher zu benutzen, um Windows zu benutzen usw. Es ist verrückt.
Mercurial hingegen scheint eher auf die freundlichere Herangehensweise hinzuarbeiten. Ihre eigene Homepage scheint für neue Benutzer viel freundlicher zu sein als Gits . In einer einfachen Google-Suche ist das fünfte Ergebnis TortoiseHg, eine sehr schöne GUI für Mercurial. Ihr gesamter Ansatz scheint zunächst Einfachheit zu sein, später Macht.
Mit Mercurial habe ich keinen SSH-Quatsch (SSH ist die Hölle unter Windows), ich habe keine dumm komplexen Befehle, ich habe keinen Kultbenutzer, ich habe keine Verrücktheit. Mercurial funktioniert einfach.
TortoiseHg bietet eine tatsächlich benutzbare Oberfläche (obwohl sie in letzter Zeit offenbar wächst), die tatsächlich nützliche Funktionen bietet. Die Optionen beschränken sich auf das, was Sie benötigen, und beseitigen Unordnung und Optionen, die selten verwendet werden. Es bietet auch viele anständige Standardeinstellungen
Mercurial, der sehr freundlich zu Neuankömmlingen war, war sehr leicht zu erlernen. Sogar einige der komplexeren Themen wie das unterschiedliche Verzweigungsmodell und die Bearbeitung des Verlaufs waren sehr einfach zu verfolgen. Ich nahm Mercurial schnell und schmerzlos auf.
Mercurial funktioniert auch nur das erste Mal mit wenig Setup. Unter JEDEM Betriebssystem kann ich TortoiseHg einfach installieren und alle gewünschten Funktionen (hauptsächlich Kontextmenübefehle) nutzen, ohne nach verschiedenen Guis suchen zu müssen. Ebenfalls fehlt das Einrichten von SSH (die Hälfte der Anleitungen sagt, dass sie Putty, Plink und Pagent verwenden sollen, während die andere Hälfte sagt, dass sie ssh-keygen verwenden sollen). Für neue Benutzer benötigt TortoiseHg Minuten zum Einrichten, während Git 30 Minuten bis eine Stunde mit viel Googeln benötigt.
Zuletzt haben Sie die Online-Repos. Githubs-Äquivalent ist BitBucket, das einige der oben beschriebenen Probleme aufweist. Es gibt jedoch auch Google Code. Wenn ich zu einem Google Code-Projekt gehe, bekomme ich keine Funktionsüberladung, sondern eine schöne, saubere Oberfläche. Google Code ist eher eine Online-Repo- / Website-Kombination, die OSS-Projekten wirklich hilft, die noch keine Website eingerichtet haben. Ich würde Google Code sehr gerne für einige Zeit als Projektwebsite verwenden und nur dann eine Website erstellen, wenn dies unbedingt erforderlich ist. Der Issue Tracker ist ebenfalls leistungsstark und passt gut zwischen Githubs fast unbrauchbarem Issue Tracker und Bugzillas Monstrosität .
Mercurial funktioniert immer nur beim ersten Mal. Git kommt mir in die Quere und ärgert mich nur, je mehr ich es benutze.
Mercurial gilt allgemein als einfacher und leichter zu lernen als Git. Im Gegenzug wird häufig die Auffassung vertreten, dass Git flexibler und leistungsfähiger ist. Dies ist zum Teil darauf zurückzuführen, dass Git tendenziell weniger umfangreiche Befehle bereitstellt, zum Teil aber auch, weil der Standard-Mercurial erweiterte Funktionen tendenziell verbirgt und es den Benutzern überlässt, die Mercurial-Konfigurationsdatei zu bearbeiten, um die von ihnen gewünschten erweiterten Funktionen zu aktivieren. Dies führt häufig zu der Annahme, dass erweiterte Funktionen in Mercurial nicht verfügbar sind.
Mercurial hat sich immer mehr auf Schnittstellenaspekte konzentriert, was das Lernen ursprünglich einfacher machte. Im Vergleich zu Git ist ein geringeres Verständnis erforderlich, um in nützlicher Weise mit Mercurial arbeiten zu können. Auf lange Sicht hat eine solche Einkapselung Mercurial das falsche Aussehen verliehen, weniger mächtig und eigenwillig zu sein, als es wirklich ist.
hg push --branch BRANCH
) oder bis zu einer bestimmten Revision ( hg push --rev REV
) verschieben. Bitte beachten Sie hg help push
für weitere Optionen.
Kontext: Ich benutze täglich sowohl Mercurial (für die Arbeit) als auch Git (für Nebenprojekte und Open Source). Ich verwende hauptsächlich textbasierte Tools mit beiden (nicht mit IDEs) und bin auf einem Mac.
Im Allgemeinen finde ich Mercurial einfacher zu bearbeiten. Einige Dinge, die ich finde, erleichtern Mercurial:
hg
Äquivalent zu git
Zweigen wird tatsächlich aufgerufen bookmarks
. Soweit ich weiß, haben hg
Filialen keine Entsprechung in git
.
git
Verzweigung eine Teilmenge der hg
Verzweigung. In können hg
Sie sowohl benannte als auch unbenannte (topologische) Zweige haben und sogar unbenannte Zweige wie git
Lesezeichen verwalten. Ich habe den Punkt im Bereich der Inszenierung noch nie wirklich gesehen. Ich würde lieber unerwünschte Änderungen zurückstellen und dann sicherstellen, dass mein Code kompiliert und meine Tests abschließt, bevor ich ihn festschreibe. Ich kann mich dann aus dem Regal entfernen und weitermachen. Auch Charles Bailey "Massieren Hunks" (p90 +) macht mir Angst * 8' ): accu.org/content/conf2011/accu2011LT_fri_share_v2.pdf
hg bookmark keyo-stuff
, führen Sie die gewünschten Schritte aus hg commit
, und führen Sie sie schließlich aus hg push -B keyo-stuff
. Wenn Sie Revisionsnummern nicht mögen, verwenden Sie sie nicht. Mercurial akzeptiert einen Hash überall dort, wo er eine Revisionsnummer akzeptiert, denke ich. Ich muss sagen, Ihre Kommentare, die Mercurial wegen mangelnder Funktionen verprügeln, haben sich in der Tat als ignorant und ein wenig aggressiv erwiesen. Sie tun nicht viel Gutes für das Klischee der Git-Benutzer!
Das ist sehr subjektiv und hängt von einer Person zur anderen ab, aber ja, ich würde das zu jemandem machen, der für VCS völlig neu ist, oder zu jemandem, der von einem "alten" VCS kommt, Mercurial wird einfacher erscheinen.
Zum Beispiel das Hinzufügen von Dateien, die Nichtexistenz des Index in Hg, die Leichtigkeit, zu einer alten Revision zurückzukehren und von dort aus zu verzweigen (einfach aktualisieren und festschreiben), als einige der "offensichtlichsten" Beispiele. Nun können die meisten Funktionen eines Systems in einem anderen emuliert werden und umgekehrt. Dies erfordert jedoch einige Kenntnisse in Git. In Mercurial sind die Standardeinstellungen (sofern ich sie so nennen darf) eher "benutzerfreundlich". Diese kleinen Dinge - der Wechsel hier und da, das nicht offensichtliche Verhalten in einem Befehl und so weiter ... diese Dinge summieren sich und am Ende scheint ein System einfacher zu bedienen zu sein als das andere.
Nur um die Antwort zu vervollständigen; Ich benutze Git, aber wenn ich ein VCS für jemanden empfehle, der "neu für sie" ist, empfehle ich fast immer Mercurial. Ich erinnere mich, als es zum ersten Mal in meine Hände kam, fühlte es sich sehr intuitiv an. Ich habe die Erfahrung gemacht, dass Mercurial weniger wtf / minute produziert als Git.
Ich denke, es ist so einfach: Mercurial hat eine vertrautere Syntax (insbesondere für SVN-Benutzer) und ist ziemlich gut dokumentiert. Sobald Sie sich an die Git-Syntax gewöhnt haben, werden Sie feststellen, dass sie genauso einfach zu bedienen ist wie alles andere.
Die Wahrnehmung könnte sich im Laufe der Zeit ändern. Mercurial ist sehr gut designt, Git auch. Mercurial scheint leichter zu lernen zu sein (zumindest für mich), und es gab Schwierigkeiten, die ich in Git hatte, für die ich keine Parallele in Mercurial habe. Ich habe versucht, Python und Ruby zu lernen und bin mit Python schneller geworden. Das bedeutet nicht, dass Python immer und überall besser ist als Ruby oder dass es sogar besser für mich ist. Es ist genau das, was ich gelernt habe und bei dem ich festgehalten habe. Programmierer führen heilige Kriege oft aus persönlichen Gründen. Das machen auch andere Menschen.
Ich bin ein Mercurial-Benutzer, der versucht, Git gegenüber aufgeschlossen zu bleiben, und ich gebe frei zu, dass es nicht "meine neue Lieblingssache geworden ist", wie es Mercurial getan hat. Ich denke, Git ist wirklich sehr, sehr schön.
Ein Gegenbeispiel für GIT / Quecksilberkomplexität: In XCode ist auf dem Mac eine nette GIT-Unterstützung integriert. Mit Mercurial ist XCode weniger einfach zu verwenden als mit GIT.
Meine bisherige Erfahrung mit GIT hat gezeigt, dass ich verwirrt und verloren bin und die Dokumentation mehr lesen muss, während ich sie verwende. Ich glaube, dass eine Menge Dokumentation geschrieben wurde, aber nichts, was es mir ermöglicht hätte, es zu "groken". Zweitens kann ich Mercurial in Python leicht ändern und erweitern, und da ich mit Python vertraut bin und jeder wirklich schnell Python lernen kann, scheint es mir ein Vorteil zu sein. Ich kenne auch C und schreibe Python-Erweiterungen in C, also nehme ich an, dass ich eines Tages, wenn ich eine benötige, leicht eine Git-Erweiterung in C schreiben könnte.
Benutzerfreundlichkeit ist nicht einfach zu quantifizieren. Es ist da und ich denke nicht, dass es ganz subjektiv ist, aber wir haben keine guten objektiven Messtechniken. Was wären die Einheiten für die Benutzerfreundlichkeit? Milli-iPods?
Ich bin nicht so parteiisch, dass ich zu 100% pro-mercurial und zu 100% anti-git bin. Ich fühle mich jetzt auf Mercurial wohler, unter Windows und Linux, und wenn ich anfange, mehr auf dem Mac zu arbeiten, gehe ich davon aus, dass ich versuchen werde, bei XCode + GIT zu bleiben.
Update 2013: Ich habe jetzt Mercurial AND GIT lange genug verwendet, um einige Funktionen zu finden, die Git gerne hätte, z. B. diese Frage zu Zusammenführungsstrategien. Wirklich Git ist erstaunlich, wenn auch schwer zu lernen und manchmal unglaublich komplex.
Es gibt ein paar Dinge, die IMO wahrscheinlich neue Benutzer von Git abschrecken werden:
Die Git-Kultur ist mehr auf die Befehlszeile ausgerichtet. Obwohl sich beide Tools zu sehr auf die Befehlszeile konzentrieren (wie ich bereits mehrfach gesagt habe, sind Befehlszeilenanweisungen zwar mächtiger und fließender, aber keine gute Marketingstrategie ), ist dies bei Git viel häufiger der Fall. Während Mercurial ein De-facto-Standard-GUI-Tool in TortoiseHg hat, das sogar die Standard-Downloadoption für Windows-Benutzer auf der Mercurial-Homepage ist, hat Git mehrere konkurrierende GUI-Frontends (TortoiseGit, Git Extensions, Gitk usw.), die nicht gut beworben werden auf der Git-Website, und die sind sowieso alle ein komplettes Problem. (Schwarzer Text auf roten Etiketten? Komm schon, TortoiseGit, du kannst es besser machen!) In der Git-Community herrscht außerdem eine weit verbreitete Meinung vor, dass Benutzer von GUI-Tools keine richtigen Software-Entwickler sind.
Git verfügt über mehrere Standardeinstellungen, die für fortgeschrittene Benutzer durchaus sinnvoll sind, aber wahrscheinlich überraschend sind, wenn nicht einschüchternd für neue Benutzer. Zum Beispiel ist es aggressiver, Aufgaben wie das Zusammenführen zu automatisieren (zum Beispiel führt Git Pull, wo immer möglich, automatisch zusammen und schreibt es fest). Es gibt Gründe für ein vollautomatisches Zusammenführen, aber die meisten unerfahrenen Benutzer haben Angst vor dem Zusammenführen und müssen die Möglichkeit erhalten, Vertrauen in ihre Tools zu gewinnen, bevor sie ihre volle Leistungsfähigkeit für ihren Quellcode entfalten können.
Dokumentation und Komplexität:
$ hg help log | wc -l
64
$ git help log | wc -l
912
Eine Sache, an die ich denken kann, ist
git add .
git commit -am "message"
gegen
hg ci -Am "message"
git commit -a
fügt keine neu erstellten Dateien hinzu, hg ci -A
was bedeutet, dass etwas, das zwei Befehle mit git erfordert, mit einem Befehl in Mercurial ausgeführt werden kann. Andererseits bedeutet "weniger Tippen" nicht unbedingt "benutzerfreundlicher".
git commit -a
einfach funktioniert, weil es einfacher ist zu kontrollieren, was für ein bestimmtes Commit hinzugefügt wird und was nicht. (Eigentlich ist es nicht ungewöhnlich, dass ich für jeden einzelne Pfadnamen spezifiziere svn ci
, um zu vermeiden, dass einem Commit Material ohne Bezug hinzugefügt wird.)
hg ci
ohne die -A
Flagge das Äquivalent von tut git commit -a
. Ich habe viel mehr git als hg verwendet, daher bin ich mir nicht 100% sicher.
hg ci
== git commit -a
.
Denn es ist.
Git enthüllt weit mehr seiner Eingeweide als Quecksilber. Sie können Quecksilber gerne innerhalb weniger Minuten nach dem Aufnehmen verwenden, aber ich finde es immer noch sehr schwierig, mich mit dem Schwachsinn auseinanderzusetzen, nachdem ich ein paar Monate damit gerungen habe (ich habe in den letzten Monaten nur sehr wenig getan, außer zu versuchen, Schwachsinn zu lernen) ). Ich benutze sowohl von der Kommandozeile als auch meistens unter Linux, so dass dies nicht nur eine Abneigung gegen die Kommandozeilenschnittstelle ist.
Ein einfaches Beispiel sind die relativ wenigen Flags und Befehlszeilenargumente, die für mercurial im Vergleich zu git benötigt werden. Der Staging-Bereich und das Verhalten des Befehls add in git erhöhen außerdem die Komplexität, als erforderlich ist. Das Trio von Zurücksetzen, Auschecken und Zurücksetzen und deren mehrfachen Permutationen fügt eine enorme Komplexität hinzu, die ziemlich unnötig war, als Sie die unkomplizierte Natur des Zurücksetzens und Aktualisierens auf mercurial erlebten.
Ich stimme mit dem obigen Kommentar auch über Hginit überein , es machte Quecksilber definitiv viel leichter zu verstehen. Gut geschrieben und sehr leicht zu verstehen. Keine der für git geschriebenen Dokumentationen kommt dem nahe. Ich finde das meiste, was von Scott Chacone geschrieben wurde (der die meisten Dokumentationen / Bücher über Git im Alleingang geschrieben hat), besonders verwirrend.