Ist die Zusammenführungs-Konfliktlösung von git effizienter als andere SCMs und Merge-Tools? [geschlossen]

8

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:

  1. weniger manuelle Konflikte - bessere Autoauflösungsalgorithmen (z. B. Umbenennen wird gut gehandhabt)
  2. sicherere Operation - Auto-Auflösung lässt mehr / nur echte Konflikte und weniger falsche Warnungen
  3. schnellerer Betrieb - sagen wir, wegen der Lean & Amp; mittleres Objektmodell
  4. besseres Werkzeug - was die Erfahrung weniger schmerzhaft macht, z.B. DAG-basierte Merge-Tracking, Mergetool, History-Abfrage / Visualisierung, Stash, Rebase, etc ...
  5. etwas anderes
  6. eine Kombination der oben genannten

? Jetzt interessiere ich mich hauptsächlich für 1 & amp; 2.

    
inger 23.06.2010, 22:26
quelle

2 Antworten

1

Ich würde gerne auf dieser Antwort falsch bewiesen werden, aber ... kommt zwangsläufig ... dieser Bereich von git ist ein bisschen unterentwickelt.

  1. 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.

  2. 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.

  • Git ignoriert den Leerraum nicht, wenn er eine Zusammenführung vornimmt ... obwohl es in der Zukunft für git darüber geredet wird. p4 kann das jetzt tun. Das Ignorieren von Leerraum ist ein großer Schmerz, es sei denn, alle Teammitglieder sind damit einverstanden, Leerzeichen oder Tabulatoren zu verwenden. Wenn Sie den Einzug einer Datei ändern möchten ... (z. B. Hinzufügen eines XML-Knotens um andere Knoten), wird dies schnell alt .
  • Ich fühle mich wie, wenn ich merge Konflikte in einer Datei finde ... die Teile, die Git sagt, sind in Konflikt mit der Verwendung von Unified-Diff-Format sind größer. Wenn nur ein Teil einer Zeile geändert wird, werden größere Teile als geändert markiert, und Sie müssen die Änderungen zwischen den beiden Bereichen der vereinheitlichten Diff-Ausgabe visuell aufspüren. Sie können dies jedoch mit einem Mergetool umgehen. p4 kann Konflikte selbst dann automatisch auflösen, wenn Sie dieselbe Zeile bearbeiten.
  • Wenn Sie langlebige Zweigstellen zusammenführen, dann sind Sie auf der sicheren Seite. Ohne rerere eingeschaltet (was standardmäßig deaktiviert ist) vergisst git, dass Sie die Datei, die vor einer Woche in Konflikt war, bereits zusammengeführt haben und Sie auffordern, sie erneut zusammenzuführen. p4 macht das mit Leichtigkeit

Meine Antworten hier sind ein bisschen subjektiv ... aber ich vermisse das Zusammenführen, das ich zwangsläufig hatte, sehr.

    
Clintm 19.07.2010 22:17
quelle
1

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 von file(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 Ausgabe git-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" ihre file(a) oben auf gemeinsame Vorfahren file(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.
  •   
    
VonC 02.10.2012 07:21
quelle