Ich habe git schon immer benutzt, aber ich möchte einen Beitrag zu Python leisten, deshalb muss ich jetzt mercurial lernen und finde es sehr frustrierend.
Also habe ich ein paar kleine Patches erstellt und wollte sie als Commits in meinem lokalen Quecksilber-Repository nachverfolgen. Anscheinend gibt es 4 Möglichkeiten, mit der Verzweigung in Quecksilber umzugehen . 1 und 4 sahen für mich völlig lächerlich aus, benannte Zweige scheinen schwer zu sein und ich habe das Gefühl, dass ich sie nicht für schnelle 1-Commit-Korrekturen verwenden soll, also habe ich Lesezeichen verwendet.
Jetzt wird mein Patch abgelehnt und ich möchte einen meiner Lesezeichen-Zweige aus meinem Repository entfernen. OK, in git würde ich einfach meinen Zweig erzwingen und vergessen, also lösche ich mein Lesezeichen und jetzt habe ich folgende Probleme:
TortoiseHG und
hg log
zeigen immer noch, dass commit unddefault
branch 2 Köpfe haben. Und wenn ich das richtig verstehe, kannst du keine Commits in hg ohne zusätzliche Plugins löschen.Mercurial hat nicht nur Hashes, sondern auch Revisionsnummern. Da ich einige meiner eigenen Commits hinzugefügt habe, haben alle Commits, die danach gezogen wurden, unterschiedliche Revisionsnummern vom zentralen Hauptrepo.
hg update
Nachdem ich gezogen habe , um meinmaster
Lesezeichen automatisch auf das neueste Commit zu verschieben, konnte ich in TortoiseHG keine Möglichkeit finden, dies zu tun.
Was mache ich falsch? Ist das normal und zu erwarten und sollte ich diese Probleme einfach ignorieren? Oder wie soll ich mit meinen Filialen arbeiten?
In Mercurial erstellen Sie keine Zweige. Jeder Commit ist quasi ein Zweig. Jeder Commit kann mehrere Eltern und mehrere Kinder haben. Das sind also die vier verschiedenen Arten, die gleichen Entitäten zu organisieren.
Sie können ihnen verschiedene Namen geben, das müssen Sie nicht , aber es ist eine gute Idee. Named Branches haben nichts Schweres an sich - es sind nur einige zusätzliche Metadaten. Ich persönlich bevorzuge benannte Zweige in jeder Situation vor allem anderen.
Was genau der Grund ist, benannte Zweige zu verwenden, anstatt alles hineinzuwerfen
default
.Sie können in Mercurial überhaupt nichts löschen und sollten es auch nicht . Sie können es verwenden,
hg strip
aber es wird nicht protokolliert - Sie schneiden im Grunde nur einen Teil Ihres lokalen Repos ab. Sie können das nicht pushen, und wenn Sie aus einem Repo ziehen, das den Zweig hat, den Sie lokal entfernt haben, kommt er zurück.Zahlen bedeuten nichts. Sie können sie ignorieren, wenn sie Sie verwirren.
Ich habe TortoiseHG nicht benutzt,
hg pull -u
werde aber beidespull
und tunupdate
.Das ist in Ordnung, viele Mercurial-Benutzer sehen Git genauso (einschließlich mir).
quelle
Auch wenn Mercurial und Git ähnlich sind, haben sie unterschiedliche Designs. Der vielleicht wichtigste Designunterschied besteht darin, dass bei Mercurial-Modifikationen die Historie nicht so flexibel ist wie bei Git (weil sie irgendwie entmutigt sind).
Kurze Antwort : Es spielt keine Rolle, ob Sie eine kleine Menge von Änderungen haben, Sie können immer noch einen Zweig verwenden. Wenn Sie denken über das Löschen dann diesen Zweig ein verwenden Lesezeichen , damit Sie es später löschen und Streifen die Änderungen danach.
Versuchen Sie zunächst, ein wenig Licht auf einige der Dinge zu werfen, die Sie erwähnen:
1 und 4 werden als Verzweigung betrachtet, da Sie bei jedem Festschreiben effektiv eine unbenannte Verzweigung erstellen (wenn es bei Ihrer Quelle / Ihrem gesegneten Repo zu derselben Zeit eine weitere Festschreibung gibt), die technisch eine Verzweigung ist. In Methode 4 erstellen Sie einen neuen "Kopf", in Methode 1 nicht . Köpfe sollen zusammengeführt werden. Ich stimme zu, dass Methode 1 irgendwie albern ist, aber einige scheinen es zu mögen ... für kleine Projekte würde ich raten.
Bei Methode 2 sind die Zweige nicht schwer, sondern dauerhaft . Sie können keine Verzweigung entfernen, wenn Sie nicht so etwas wie die Streifenerweiterung verwenden. Die Designphilosophie von Mercurial zielt nicht darauf ab, die Geschichte zu verändern (aber es ist besser geworden).
In Bezug auf Revisionsnummern sind sie nur eine lokale und besser lesbare Referenz für Sie, um alle Befehle zu verwenden, die mit Revisionen zu tun haben. Wenn Sie gerne Hashes verwenden, können Sie dies trotzdem tun. Revisionsnummern sind nur eine Abkürzung und werden von Mercurial für interne Operationen zwischen verschiedenen Repositorys ignoriert.
Um nun Ihre anderen Fragen zu beantworten:
hg heads
. Wenn Sie 2 oder mehr Köpfe in einem einzelnen Zweig sehen, ist es vorzuziehen, dass sie zusammengeführt werden. Dort befindet sich wahrscheinlich Ihr Lesezeichen .hg rollback
, aber ich schätze, dass dies nicht der Fall ist.hg bookmark --delete yourbookmark
Außerdem können Sie in Git "private lokale Zweige" haben, da Sie diese explizit pushen müssen und Sie sie anschließend löschen können. In Mercurial drücken Sie alles, was Sie haben . Wenn Sie dies jedoch vermeiden möchten, können Sie die Funktion " Phasen" verwenden und eine Reihe von Überarbeitungen als geheim markieren . Geheime Revisionen werden nicht gepusht.
Schließlich tun Sie nichts Falsches , denken Sie nur daran, dass es sich nur um verschiedene Tools handelt, die mit leicht unterschiedlichen Einstellungen erstellt wurden. Dabei handelt es sich im Wesentlichen um das Ändern von Verlauf (git) oder das Nicht-Ändern von Verlauf (hg). In Mercurial ist es schwieriger, sich in den Fuß zu schießen und die Geschichte zu verändern (besonders mit Phases), und deshalb mögen es manche besser als Git .
quelle
hg strip
. Ich denke, man könnte dasselbe über dezentrale Kopien von Git-Zweignamen streiten, mit Ausnahme der Unterscheidung, dass benannte Zweige einen globalen Namensraum haben und Git-Zweignamen nicht. Und mehrere Köpfe existieren aufgrund von Namensverzweigungen. Es ist eine Art ansteckender Entwurfsfehler für ein dezentrales VCS.Ich finde es bei mercurial am einfachsten, sich keine Sorgen um Äste zu machen. Ich finde nur, wo in der Geschichte ich nach Bedarf bearbeiten und Commits erstellen möchte (auch bekannt als anonyme Zweige). Manchmal können Lesezeichen nützlich sein, wenn ich in verschiedenen Kontexten zwischen den Köpfen wechseln muss, aber meistens kümmere ich mich nicht darum. Benannte Zweige sind für langlebige Zweige (Fehlerbehebungszweige, Projektzweige) in Ordnung, aber für 1- oder 2-Commit-Korrekturen sind sie nicht das richtige Werkzeug für den Job.
Der Trick bei anonymen Zweigen besteht darin, ihre Phase auf "geheim" zu setzen, wenn Sie sie nicht pushen möchten, dh wenn Sie sie lokal halten möchten. Wenn Sie sie pushen möchten, aber keine weiteren Commits basierend auf ihnen möchten, legen Sie einfach einen "--close-branch" darüber, was bedeutet, dass sie nicht mehr in der "Heads" -Liste und in mercurial erscheinen hört auf, sich über mehrere Köpfe auf diesem Zweig zu beschweren.
quelle
Ich denke, wir können einfach ein Lesezeichen anstelle eines Zweigs verwenden. Wir werden das Produkt trotzdem weiter unterstützen, und das Zusammenführen von zwei Niederlassungen auf lange Sicht würde große Kopfschmerzen bereiten.
quelle