Angenommen, es werden mehrere Zweige A
und B
ein inkrementeller "Bugfix" -Zweig entwickelt C
.
Jetzt C
ist schon "fertig" und mit dem Master verschmolzen. A
und B
befinden sich noch in der Entwicklung und werden nicht behoben, bevor (möglicherweise) ein anderer Bugfix-Zweig in master zusammengeführt wird.
Ist es eine gute Idee, C
so schnell wie möglich in den neuen Feature-Zweigen zusammenzuführen? Damit die neuen Funktionen so nah master
wie möglich bleiben ? Oder ist es besser, die neue Funktion in ihrer eigenen "Welt" erst dann entwickeln zu lassen, wenn sie fertig ist?
Es wird sowieso Konflikte geben, daher muss Zeit darauf verwendet werden, diese zu beheben.
version-control
branching
merging
paul23
quelle
quelle
Antworten:
Je länger eine Niederlassung lebt, desto mehr kann sie von der Hauptniederlassung abweichen und desto unübersichtlicher und komplizierter wird die resultierende Zusammenführung sein, wenn sie endgültig abgeschlossen ist. Zehn kleine Konflikte sind einfacher zu lösen als ein massiver Konflikt und können Entwickler tatsächlich daran hindern, ihren Aufwand zu duplizieren oder zu verschwenden. Da sollten Sie verschmelzen
master
inA
undB
regelmäßig; Einmal am Tag ist eine häufige Empfehlung. Wenn Sie jedoch in Ihren Filialen viel zu tun haben, möchten Sie möglicherweise mehrmals am Tag fusionieren.Zusätzlich zur Erleichterung der Konfliktlösung erwähnen Sie ausdrücklich
C
einen Bugfix-Zweig. Als Entwickler möchte ich, dass meine Filiale über die neuesten Bugfixes verfügt, um sicherzustellen, dass ich kein Verhalten wiederhole, das zu einem Bug geführt hat, oder Tests schreibe, die auf fehlerhaften Daten basieren.Wenn Sie wissen, dass Konflikte auftreten werden, möchten Sie möglicherweise eine andere Verzweigungsstrategie anwenden. Behalten Sie nach Möglichkeit mehrere Änderungen an denselben Dateien in demselben Zweig bei, und reduzieren oder beseitigen Sie die Anzahl der Konflikte. Refaktorieren Sie Storys so, dass sie so weit wie möglich unabhängig sind, und überarbeiten Sie Zweige, um möglicherweise mehrere Storys abzudecken (Zweig, Feature und Story sind nicht immer austauschbar).
quelle
Angenommen, Sie möchten A, B irgendwann wieder mit dem Master zusammenführen und eine einzige Codebasis beibehalten, ist es niemals eine gute Idee, zu weit vom Master abzuweichen. Zu lange vom Master abzuweichen, insbesondere wenn Fehlerbehebungen und andere Entwicklungen beim Entwickeln von A, B zum Master verschmelzen, wird mit Sicherheit zu Konflikten führen.
Ich würde Strategien in Betracht ziehen, die den folgenden ähnlich sind
quelle
In der Regel ist oft besser als eine massive.
Kleinere, häufigere Pull-Anforderungen sind fast immer besser.
Ich habe damit begonnen, hauptsächlich Konfigurationsflags zu verwenden, damit ich frühzeitig kleinere Pull-Anforderungen ausführen kann, um wiederum Code einfacher zusammenzuführen, aber die Funktion deaktiviert zu lassen. Je kleiner die Pull-Anforderung ist, desto einfacher ist es, den Code zu überprüfen, auch wenn insgesamt mehr Pull-Anforderungen vorliegen. Die meisten Menschen jeder Art werden keine aussagekräftigen Überprüfungen von massiven Pull-Anfragen durchführen können. Es ist einfach zu schwierig für den mentalen Arbeitsspeicher, alle möglichen Auswirkungen einer massiven Codeänderung zu verstehen.
Das Erstellen eines Konfigurations-Flags ist mit einem zusätzlichen Aufwand verbunden, sodass es sich bei kleineren Features nicht lohnt. Aber dann wird Ihre Pull-Anfrage trotzdem klein sein.
Es kann jedoch Situationen geben, in denen die Funktion auf einmal freigegeben werden muss. Selbst dann ist es möglicherweise besser, kleinere Pull-Anforderungen an einen anderen Zweig zu richten, der für diesen Zweck erstellt wurde.
Die meisten meiner Kollegen stöhnen, wenn jemand einen massiven Pull-Request erzeugt, und das zum größten Teil zu Recht.
Beachten Sie auch, dass ich manchmal Commits in separaten Zweigen auswählen muss. Wenn das, was gepflückt werden muss, in einem einzigen Commit zusammengefasst werden kann, ist es einfacher, es in andere Zweige zu verschieben. Dies ist ein Fall, in dem es besser ist, nur wenige Commits zu haben, aber es ist nicht genau der Standardprozess, wenn Ihre Kirsche herumpflückt.
quelle
In Refactoring von Martin Fowler gibt er den Rat, niemals einen Zweig länger als einen Tag vom Meister abzweigen zu lassen. IIRC, Sie sollten eine kleine Änderung vornehmen, testen, um sicherzustellen, dass Sie nichts kaputt gemacht haben, und es dann wieder zusammenführen.
quelle
A
undB
halten Sie radikale Neuüberholungen an, wie die Anwendung funktioniert, sie werden nicht innerhalb eines Monats "erledigt". Sie sind jedoch auch nutzlos, bevor sie fertig sind ...Eine andere Option für wirklich langlebige Änderungen, die möglicherweise abgeschlossen, aber noch nicht einsatzbereit sind, besteht darin, sie hinter ein Feature-Flag zu setzen, damit sie zum Master zusammengeführt werden können, ohne dass das Risiko besteht, dass etwas kaputt geht. Sobald sie einsatzbereit sind, kann das Feature-Flag entfernt werden.
quelle