Das Unternehmen, für das ich arbeite, hat allmählich Probleme mit dem aktuellen Verzweigungsmodell und ich habe mich gefragt, welchen unterschiedlichen Arten von Verzweigungsstrategien die Community ausgesetzt war.
Gibt es gute für verschiedene Situationen? Was verwendet Ihr Unternehmen? Was sind die Vor- und Nachteile von ihnen?
version-control
branch
branching-strategy
Craig H.
quelle
quelle
Antworten:
Hier ist die Methode, die ich in der Vergangenheit mit gutem Erfolg angewendet habe:
/ Rumpf - Blutungskante. Nächste Hauptversion des Codes. Kann zu einem bestimmten Zeitpunkt funktionieren oder nicht.
/branches/1.0, 1.1 usw. Stabile Wartungszweige des Codes. Wird verwendet, um Fehler zu beheben und neue Versionen zu stabilisieren. Wenn es sich um eine Wartungsniederlassung handelt, sollte diese (falls zutreffend) kompiliert und jederzeit für die Qualitätssicherung / den Versand bereit sein. Wenn es sich um einen Stabilisierungszweig handelt, sollte dieser kompiliert und vollständig sein. Es sollten keine neuen Funktionen hinzugefügt, kein Refactoring und keine Codebereinigungen durchgeführt werden. Sie können ein Präfix hinzufügen, um Stabilisierungszweige gegenüber Wartungszweigen anzugeben.
/ branches / cool_feature. Wird für sehr experimentelle oder zerstörerische Arbeiten verwendet, die möglicherweise in den Kofferraum (oder in einen Wartungszweig) gelangen oder nicht. Keine Garantie für das Kompilieren, Arbeiten oder sonstige Verhalten von Code. Sollte so kurz wie möglich dauern, bevor Sie in den Hauptzweig übergehen.
/tags/1.0.1, 1.0.2, 1.1.3a usw. Wird zum Kennzeichnen einer verpackten und versendeten Version verwendet. Niemals ändern. Erstellen Sie so viele Tags, wie Sie möchten, aber sie sind unveränderlich.
quelle
Ich würde Eric Sinks Meinung zu diesem Thema sehr empfehlen:
Kapitel 7: Zweige
Ich, wie Eric, bevorzuge die Verzweigung im "Ordner" -Stil, über die er spricht.
quelle
Informationen zur Mutterstruktur für Verzweigungsmuster finden Sie in Brad Appletons Streamed Lines: Verzweigungsmuster für die parallele Softwareentwicklung . Es ist eine schwere Aufgabe, aber ich habe nichts gesehen, was es in Bezug auf Breite und Tiefe des Wissens über Verzweigungen übertreffen könnte.
quelle
Unser Repository sieht aus wie:
/ trunk ist Ihre Standardentwicklung. Wir verwenden CI, daher muss dies immer Tests erstellen und bestehen.
/ branches Hier setzen wir "sanktionierte" große Änderungen ein, dh etwas, von dem wir wissen, dass es in den Kofferraum gelangt, aber möglicherweise etwas Arbeit benötigt und CI brechen würde. Auch dort, wo wir an Wartungsversionen arbeiten, die ihre eigenen CI-Projekte haben.
/ sandbox Jeder Entwickler hat seine eigene Sandbox sowie eine gemeinsam genutzte Sandbox. Dies gilt für Aufgaben wie "Fügen wir unserem Produkt einen LINQ-Anbieter hinzu", die Sie ausführen, wenn Sie nicht Ihre eigentliche Arbeit erledigen. Es kann schließlich in den Kofferraum gehen, es kann nicht, aber es ist da und unter Versionskontrolle. Kein CI hier.
/ Vendor Standard Vendor Branch für Projekte, in denen wir kompilieren, aber keinen Code pflegen.
/ ccnet Dies sind unsere CI-Tags, die nur der CI-Server hier schreiben kann. Im Nachhinein hätten wir gesagt, wir sollten dies in etwas Allgemeineres wie CI, BUILDS usw. umbenennen.
quelle
Werfen Sie einen Blick auf diese http://codicesoftware.blogspot.com/2010/03/branching-strategies.html für eine bessere Erklärung
quelle
Das erste: KISS (Halte es einfach dumm!)
* 1) Halten Sie die Version wartbar - z. B. Service Packs, Hotfixes, Bugfixes, die bei Bedarf und / oder bei Bedarf mit dem Trunk zusammengeführt werden können.) * 2) major.minor.build.revision
Faustregeln:
--hfrmobile
quelle
Wir verzweigen uns, wenn eine Veröffentlichung für die endgültige Qualitätssicherung bereit ist. Wenn während des QS-Prozesses Probleme festgestellt werden, werden die Fehler in der Verzweigung behoben, validiert und dann mit dem Trunk zusammengeführt. Sobald der Zweig die Qualitätssicherung bestanden hat, kennzeichnen wir ihn als Release. Alle Hotfixes für diese Version werden auch für den Zweig vorgenommen, validiert, mit dem Trunk zusammengeführt und dann als separate Version markiert.
Die Ordnerstruktur würde folgendermaßen aussehen (1 QA-Zeile, 2 Hotfix-Releases und der Trunk):
quelle
Wir verwenden den wilden, wilden Weststil der Git-Zweige. Wir haben einige Niederlassungen mit bekannten Namen, die durch Konventionen definiert sind. In unserem Fall sind Tags jedoch für uns wichtiger, um die Anforderungen unserer Unternehmensprozessrichtlinien zu erfüllen.
Ich habe unten gesehen, dass Sie Subversion verwenden, daher denke ich, dass Sie wahrscheinlich den Abschnitt über Verzweigungen im Subversion-Buch lesen sollten . Sehen Sie sich insbesondere den Abschnitt "Repository-Layout" unter Zweigwartung und allgemeine Zweigmuster an .
quelle
Die Alternative, die ich hier nicht sehe, ist eine "Branch on Change" -Philosophie.
Was ist, wenn Ihr Kofferraum die "aktuelle Version" ist, anstatt Ihren Kofferraum im "Wilden Westen" zu haben? Dies funktioniert gut, wenn jeweils nur eine Version der Anwendung veröffentlicht wird, z. B. eine Website. Wenn eine neue Funktion oder Fehlerbehebung erforderlich ist, wird eine Verzweigung erstellt, um diese Änderung zu speichern. Dies ermöglicht häufig die Migration der Fixes zur individuellen Veröffentlichung und verhindert, dass Ihre Cowboy-Codierer versehentlich eine Funktion zur Veröffentlichung hinzufügen, die Sie nicht beabsichtigt haben. (Oft ist es eine Hintertür - "Nur zum Entwickeln / Testen")
Die Hinweise von Ben Collins sind sehr nützlich, um festzustellen, welcher Stil für Ihre Situation gut geeignet ist.
quelle
Die Versionskontrolle von Henrik Kniberg für mehrere agile Teams muss ebenfalls einige gute Punkte berücksichtigen.
quelle
Gnat hat diese hervorragende Aufschlüsselung der verschiedenen Ratschläge geschrieben, die Sie zu Verzweigungsstrategien finden können.
Es gibt keine einzige Verzweigungsstrategie, sondern das, wofür funktioniert:
Jeff Atwoods Beitrag bietet viele Möglichkeiten. Ein weiteres Element ist das Konzept der Werbung (aus dem Link von Ryan Duffield). In diesem Setup haben Sie einen Entwicklungszweig, einen Testzweig und einen Freigabezweig. Sie fördern Ihren Code, bis er den Release-Zweig erreicht und bereitgestellt wird.
quelle
Wir haben derzeit eine Niederlassung für die laufende Wartung, eine Niederlassung für "neue Initiativen", was nur "Dinge bedeutet, die irgendwann in der Zukunft herauskommen werden; wir sind uns nicht sicher, wann". Gelegentlich gab es auch zwei Wartungszweige: einen zur Behebung der derzeit in Produktion befindlichen und einen noch in der Qualitätssicherung befindlichen.
Der Hauptvorteil, den wir gesehen haben, ist die Fähigkeit, schneller auf Benutzeranfragen und Notfälle zu reagieren. Wir können das Update für den in Produktion befindlichen Zweig durchführen und freigeben, ohne zusätzliche Elemente freizugeben, die möglicherweise bereits eingecheckt wurden.
Der Hauptnachteil besteht darin, dass wir am Ende viel zwischen Zweigen zusammenführen, was die Wahrscheinlichkeit erhöht, dass etwas übersehen oder falsch zusammengeführt wird. Bisher war das kein Problem, aber es ist definitiv etwas zu beachten.
Bevor wir diese Richtlinie eingeführt haben, haben wir im Allgemeinen die gesamte Entwicklung im Trunk durchgeführt und erst verzweigt, als wir Code veröffentlicht haben. Wir haben dann nach Bedarf Korrekturen an diesem Zweig vorgenommen. Es war einfacher, aber nicht so flexibel.
quelle
Jeff Atwood schrieb darüber in einem guten Blog-Beitrag; Dieser Beitrag enthält einige wichtige Links.
quelle
Die Philosophie, die wir bei der Arbeit verfolgen, ist es, den Kofferraum in einem Zustand zu halten, in dem Sie jederzeit schieben können, ohne die Baustelle drastisch zu beschädigen. Dies bedeutet nicht, dass der Kofferraum immer in einem perfekten Zustand ist. Es wird natürlich Fehler geben. Aber es geht darum, es niemals drastisch kaputt zu machen.
Wenn Sie eine Funktion hinzufügen möchten, verzweigen Sie. Eine Designänderung, Zweig. Es gab so viele Male, in denen ich dachte: "Oh, ich kann das einfach im Kofferraum machen, es wird nicht so lange dauern", und dann 5 Stunden später, als ich den Fehler nicht herausfinden kann, der die Dinge kaputt macht, die ich mache wünschte wirklich, ich hätte mich verzweigt.
Wenn Sie den Kofferraum sauber halten, haben Sie die Möglichkeit, Fehlerbehebungen schnell anzuwenden und zu veröffentlichen. Sie müssen sich keine Sorgen um den fehlerhaften Code machen, den Sie bequem abzweigen.
quelle
Dies hängt davon ab, welches Versionskontrollsystem Sie verwenden. Jedes VCS hat unterschiedliche Ansätze zur Verzweigung.
Welchen VSC verwenden Sie?
quelle
Für Subversion stimme ich dem Kommentar von Ryan Duffield zu. Das Kapitel, auf das er sich bezieht, bietet eine gute Analyse des zu verwendenden Systems.
Der Grund, den ich gefragt habe, ist, dass Perforce eine völlig andere Möglichkeit bietet, Zweige aus SVN oder CVS zu erstellen. Außerdem gibt es alle DVCSs, die eine eigene Philosophie für die Verzweigung haben. Ihre Verzweigungsstrategie hängt davon ab, welche Tools Sie verwenden.
Zu Ihrer Information , Svnmerge.py ist ein Tool zum Zusammenführen von Zweigen in SVN. Es funktioniert sehr gut, solange Sie es häufig (alle 10-30) festschreiben, da sonst das Tool verwirrt werden kann.
quelle
Unabhängig davon, welches Verzweigungsmuster gewählt wurde, sollten Sie versuchen, Ihre Zweige in einer binären Baumform wie folgt zu halten:
quelle