Ausgehend von einem SVN-Hintergrund ist es eines der schwierigsten Dinge, sich bei der Arbeit mit DVCS-Systemen daran zu gewöhnen, dass sie alle unverbindliche Änderungen als tickende Zeitbombe betrachten.
Wenn Sie in Mercurial versuchen, Änderungen abzurufen, und Sie nicht festgeschriebene Änderungen in Ihrer Arbeitskopie haben, müssen Sie durch die Rahmen springen, um die eingehenden Änderungen in zusammenzuführen. Versuchen Sie, Zweige zu wechseln? Es wird Sie zwingen, alles zurückzustellen, und dann müssen Sie alles am anderen Ende sofort aus dem Regal nehmen. (SVN hat mit keinem dieser Szenarien Probleme.)
Git ist ungefähr der gleiche Weg. Ich arbeite Seite an Seite mit einem anderen Entwickler an einem Projekt und habe nur versucht, einen seiner Commits in meine Gabel zu stecken. Es hat sich geweigert, mich zuzulassen, weil ich Änderungen an meiner Arbeitskopie in völlig anderen Dateien als den in seinem Commit geänderten nicht festgeschrieben habe. Es gibt nicht einmal eine Zusammenführungsoption. anscheinend muss ich zuerst meine Änderungen verstauen!
Wenn eine Person etwas völlig harmloses mit solch äußerster Vorsicht behandeln würde, würde ich es eine "Phobie" nennen, eine irrationale Angst, die als psychische Störung angesehen werden sollte. Aber Git und Mercurial wurden von zwei verschiedenen Teams intelligenter, rationaler Entwickler entworfen, daher muss ich mich fragen, ob sie etwas wissen, von dem ich nichts weiß.
Gibt es einen technischen Grund, der diese Haltung gegenüber unverbindlichen Änderungen rechtfertigt? Und wenn ja, warum scheint das fragliche Problem nur bei DVCS zu bestehen?
quelle
Antworten:
Fortsetzen
Es ist keine Phobie, es ist eine (manchmal harte) Durchsetzung der Befolgung guter Manieren "oft begehen" (SVN-Benutzer haben manchmal Angst vor diesem Stil).
Und endlich
hg qnew|qpop|qpush
ist ein kleiner fairer Preis für Sauberkeit und Ordnungquelle
Wenn Sie zusammenführen oder auswählen
git
, erstellen Sie sofort ein Commit. Der Vorgang ist erst abgeschlossen, wenn das Festschreiben abgeschlossen ist und Teil des Verlaufs ist.Was würde nun passieren, wenn
git
Sie Ihre nicht festgeschriebenen Änderungen in Ihrem Arbeitsverzeichnis beschönigen könnten? Es fällt Ihnen (mehr oder weniger) schwer, zwischen den Änderungen / Zusammenführungskonflikten zu unterscheiden, die Sie für die Zusammenführung / Auswahl benötigen, und den Änderungen, die Sie selbst vorgenommen haben. Außerdem wäre es für Sie nahezu unmöglich zu testen, was Sie tatsächlich begehen.Das Erzwingen eines sauberen Arbeitsverzeichnisses für Zusammenführungssituationen hilft daher, die Dinge einfach und überschaubar zu halten. Alles, was Sie tun müssen, ist, Ihre nicht festgeschriebenen Änderungen vor dem Zusammenführen zu speichern und sie anschließend zu entsorgen. Beachten Sie, dass im Workflow
Sie haben zwei (!) Zusammenführungsvorgänge. Eine, die Ihr letztes Commit mit den eingehenden Änderungen zusammenführt, und eine, die Ihre nicht festgeschriebenen Änderungen mit dem resultierenden Zusammenführungs-Commit zusammenführt. Auf diese Weise müssen Sie immer nur zwei Dinge zu einem zusammenführen, um die Verwirrung zu vermeiden, die sich aus dem Versuch ergibt, drei Dinge in einem einzigen Vorgang zu einem zusammenzuführen, während Sie versuchen, diese drei Dinge zu ignorieren. Das
git stash
/git stash pop
macht es einfach und explizit, dass Sie Ihre nicht festgeschriebenen Änderungen für die Zusammenführung ignorieren.quelle