Ist die Konfliktlösungsauflösung von git
inhärent effizienter als andere SCMs (CVS, Subversion usw.) und auch eigenständige Merge-Tools? Wenn ja, warum?
Klarstellung: hier Ich interessiere mich mehr für den Algorithmus selbst - unterscheidet er sich von einer einfachen diff3-Methode? Einige Tools behaupten, darin schlauer zu sein (z. B. Guiffy), lohnt es sich, einen als git merge tool einzubinden? Ist es etwas schlauer, Textstücke innerhalb oder zwischen Dateien zu finden? (anstatt laute Konflikte zu melden. Ich hatte einen vagen Eindruck von dem, was Linus geredet hat).
Hintergrund: Habe gerade eine riesige Zusammenführung mit git-svn
gemacht, was zu der Hälfte der Konflikte geführt hat, als ich mit plain svn merge
hatte (zuerst merge ohne Tracking). Also würde ich gerne verstehen warum.
Es gibt ähnliche Qs / As, aber es geht eher um das große Bild des Prozesses und darum, wie das Zusammenfassen natürlicher ist. Zu diesem Zweck ist git
"für Zusammenführungen optimiert" (im Gegensatz zu nur Verzweigung), bedeutet es eigentlich:
? Jetzt interessiere ich mich hauptsächlich für 1 & amp; 2.
Ich würde gerne auf dieser Antwort falsch bewiesen werden, aber ... kommt zwangsläufig ... dieser Bereich von git ist ein bisschen unterentwickelt.
Die automatische Zusammenführung in Git ist nicht existent. Die neueste Version bietet grundlegende Unterstützung für die Durchführung einer Zusammenführung mit Ihren Änderungen oder deren Änderungen, aber das war's. Grundsätzlich, wenn Sie einen Teil einer Datei bearbeiten und jemand anders den gleichen Teil einer Datei bearbeitet ... sind Sie allein für die Auflösung der Zusammenführung. Das diff3-Format ist verfügbar (3-Wege-Merge), aber ich glaube, dass ein einheitliches Diff-Format der Standard ist. Ich benutze tatsächlich Araxis als Merge-Tool und habe es eingerichtet, um 3-Wege-Merge zu verwenden, wenn "git mergetool" ausgeführt wird. Ich komme allerdings aus Zwangsarbeit ... Ich fühle mich wie Geier weit hinten in diesem Bereich.
Nicht zutreffend
Aktualisieren Sie RE: Kommentare
Ich habe nicht tief genug gegraben, genau was git denkt, ist ein Konflikt und genau was p4 denkt, ist ein Konflikt, aber hier ist, was ich in beiden erlebt habe.
Meine Antworten hier sind ein bisschen subjektiv ... aber ich vermisse das Zusammenführen, das ich zwangsläufig hatte, sehr.
Darüber hinaus aktuellerer Thread (2012 ) erläutert den Begriff der "automatischen Auflösung" mit Git:
Meine Definition für "automatisch auflösen":
"Während einer Zusammenführung werden die Arbeitsbaumdateien aktualisiert, um das Ergebnis der Zusammenführung wiederzugeben ... Wenn beide Seiten Änderungen an verschiedenen Bereichen der gleichen Datei vorgenommen haben, wählt git beide Seiten aus automatisch und überlässt es Ihnen, sicherzustellen, dass Sie diese Zusammenführungsergebnisse auf Korrektheit überprüfen, nachdem git das Zusammenführen festgeschrieben hat. "IOW, eine "automatische Auflösung" bedeutet, dass beide Seiten (unsere und ihre) Änderungen an
file(a)
seit der gemeinsamen Vorgängerversion vonfile(a)
vorgenommen haben und git beide Seiten ausgewählt hat, ohne einen Merge-Konflikt zu verursachen.
(Der Grund, warum ich den Begriff "automatische Auflösung" erfunden habe, ist, dass in der Ausgabegit-merge
der Begriff "Auto-Merging" auch bedeuten kann, dass nur eine Seite (ihr)file(a)
seit dem gemeinsamen Vorfahren geändert hat Git ist nur "Schnellvorlauf" ihrefile(a)
oben auf gemeinsame Vorfahrenfile(a)
.)
Junio C Hamano wirft als Antwort einen wichtigen Punkt auf :
- weiß git ist dumm und irrt auf der sicheren Seite , stochert alles entfernt komplex;
- wissen, dass textuelle Nicht-Konflikte, die in derselben Datei vorkommen, das gleiche Risiko haben, semantische Konflikte über verschiedene Dateien hinweg zu haben, so dass das Herausselven "berührte die gleiche Datei, aber keinen Konflikt" jedes Sonderzeichen sinnlos ist, aber in jedem Fall Die Wahrscheinlichkeit, einen solchen Konflikt zu haben, ist klein genug, um die Merge (und andere Merges) zuerst zu vervollständigen und dann das Gesamtergebnis zu überprüfen, um Ihre Zeit effizienter zu nutzen, da Sie das Ergebnis mindestens einmal im Auge behalten müssen, bevor Sie es hinausschieben.
Tags und Links merge git version-control conflict 3-way-merge