2014-05-07 9 views
6

Ich bin nicht sicher, ob ich Git vertrauen kann, um automatisch zusammenzuführen. Hier ist ein Szenario.Wie kann ich Git merge vertrauen?

ein Programm im Master erstellen:

MOVE 0 TO I. 
A. 
    PERFORM X-PROC. 
    IF I IS EQUAL TO 25 THEN GO TO A. 

Entwickler 1 macht einen Zweig und stellt fest, dass ein Fehler vorhanden ist: eine Endlosschleife. Er legt es:

MOVE 0 TO I. 
A. 
    ADD 1 TO I. 
    PERFORM X-PROC. 
    IF I IS EQUAL TO 25 THEN GO TO A. 

Inzwischen Entwickler 2 macht einen Zweig und behebt den Fehler in ihrer eigenen Art und Weise:

MOVE 0 TO I. 
A. 
    PERFORM X-PROC. 
    ADD 1 TO I. 
    IF I IS EQUAL TO 25 THEN GO TO A. 

Beide Entwickler ihren Code testen und finden es richtig. Beide verschmelzen mit dem Master:

MOVE 0 TO I. 
A. 
    ADD 1 TO I. 
    PERFORM X-PROC. 
    ADD 1 TO I. 
    IF I IS EQUAL TO 25 THEN GO TO A. 

Die Endlosschleife ist zurück.

Es scheint mir, dass dieses Problem oft in einer verteilten Entwicklungsumgebung auftreten muss. Als ich das getestet habe, hat Git keinen Merge-Konflikt gemeldet. Manchmal könnte dieses Problem lange unentdeckt bleiben. Ein Regressionstest sollte es finden, aber Regressionstests werden auch in Git zusammengeführt, so dass wir ihnen auch nicht vertrauen können.

Was kann ich dagegen tun? Muss ich nach jedem Zusammenführen einen Code lesen?

Antwort

9

Muss ich nach jedem Zusammenführen einen Code lesen?

Ja, natürlich.

Automerge-Algorithmen sind hilfreich, aber sie sind keine Magie; Sie enthalten nur die Änderungen, die an beiden Seiten einer Datei vorgenommen wurden, wenn sie nicht in Konflikt stehen. Es gibt keine Garantie, dass die resultierende Änderung kompiliert oder gar nicht kursiv ist. Es gibt keine Garantie, dass die Logik kein kompletter Zugbruch ist. (Einige haben spekuliert, dass der Heartbleed-Fehler das Ergebnis eines Automations ist, der subtil die Logik änderte und nicht in der Überprüfung erwischt wurde.)

Dies gilt für jedes Versionskontroll-Tool, das einen Automge ausführt etwas, das in den letzten 15 Jahren oder so geschrieben wurde, ist fast sicher.) Dies soll jedoch nicht automede, die zwei Änderungen an der gleichen Datei löst und im Allgemeinen eine gute Arbeit macht; Dies gilt auch für eine Zusammenführung im Allgemeinen. Wenn Sie eine Datei A ändern und einige Datei B ändern, gibt es keine Garantie, dass die Zusammenführung sinnvoll ist.

Best Practice: Sie sollten Ihre Zusammenführungen immer überprüfen, bevor Sie sie festschreiben oder verschieben, auch wenn sie automatisch erfolgreich ausgeführt werden.

+4

Testsuiten/Komponententests sind ein wunderbares Werkzeug, um die Arbeitsbelastung zu reduzieren, wenn Sie gigantische Verschmelzungen haben (die Sie normalerweise nicht haben sollten) - aber fallen Sie nicht in das falsche Gefühl von Sicherheit und vernachlässigen Vernunft-Überprüfung Ihrer Verschmelzungen, nur weil deine Tests alle bestanden haben! –

+1

Eine Technik, die ich verwende, um eine Verschmelzung weniger schmerzhaft zu verifizieren, besteht darin, das Diff einer Verzweigung vor und nach einer Verschmelzung mit einer anderen Verzweigung zu nehmen und dann dieses Diff (unter Verwendung eines Diffing-Programms) mit dem Diff der Änderungen zu vergleichen anderer Zweig. Wenn es keinen Unterschied zwischen den Diffs gibt, kann ich höhere Sicherheit haben, dass die Zusammenführung nicht verpfuscht wurde. –

+0

Danke NevikRehnel und @cupcake - Ich würde alle Strategien von Menschen lieben oder hören, die die Verschmelzung der geistigen Gesundheit überprüfen! –