Frage

Wir haben ein Softwareprodukt, das im Rhythmus der Kundenbedürfnisse und eine allgemeineren Roadmap entwickelt.

Weil wir in einer SCRUM Projektumgebung sind, passiert es sehr regurlarly, dass ein neues Feature mit dem Produkt seinen Weg macht, und dann werden wir mit der Wahl konfrontiert:

  • Sie diese Funktion in einem bereits veröffentlichten Zweig der Umsetzung (nicht wirklich der Punkt einen Zweig hat, dann)
  • eine Niederlassung zu machen - aber dann haben wir eine Niederlassung alle drei Wochen, und es ist maintanable einfach nicht mehr

Nicht das neue Feature Freigabe eine Option nicht, die Kunden wollen nicht für ein langfristiges Meilensteinplan warten, um die Funktionen, die sie wollen bekommen, und es ist nicht immer faisible die Funktion in einer Client-Modul zu bewegen - wir manchmal müssen den Kern des Produkts ändern ...

Hat jemand ein Feedback auf eine gute Praxis diese Art von Beschränkungen gegeben?

War es hilfreich?

Lösung

Ich würde folgendes vorschlagen, die wir in meiner aktuellen Umgebung benutzen. Behandeln die ungeplante Funktion wie bei einem Sicherheitsupdate

  • Jede geplante Freisetzung (z 3.0, 3.1) erhält eine eigene Versionsnummer und einen eigenen Tag im Quellcode. Nachdem es freigegeben ist, müssen Sie es nicht berühren.
  • Neue Funktionen nach einer geplanten Veröffentlichung in die nächste geplante Release gehen (zum Beispiel 3.2)
  • Wenn Sie eine freigegebene Version des Codes ändern müssen, ist es eine „ungeplante Freisetzung“ und bekommt eine Patch-Versionsnummer (z 3.1.1, 3.1.2). Alle Änderungen:
    • in einer neuen Niederlassung implementiert Lassen Sie sich bei dieser Veröffentlichung der neuesten Patch basierte weg (von 3.1.0 erstellt wird, 3.1.1, 3.1.2 zum Beispiel von 3.1.1 erstellt)
    • verschmolzen sofort Stamm, so dass sie auch in den nächsten geplanten Release bekommen
  • Nach dem ungeplanten Funktion Implementierung Sie den Zweig in einem Tag drehen (aka Sie es nicht mehr berühren) und gehen Sie zurück in den Kofferraum zu arbeiten.

Auf diese Weise jede ungeplante Funktion erhält einen Zweig, sondern nur lange genug, um eine neue Version zu machen und in dem Stamm zusammenführen. Sie tun fast alle Ihrer Arbeit an einem Ort - Stamm - und haben nicht viel verschmelzenden Arbeit zu tun

.

Andere Tipps

Ein neuer Zweig wie ( ‚new_feature_branch‘) ist ein Entwicklungsaufwand zu materialisieren , die nicht kompatibel mit dem Strom Zweig (wie 'release_branch')

Also, wenn Ihr aktuelles release_branch nicht sehr aktiv ist, können Sie es für die neue Funktion verwenden können (vorausgesetzt, definieren Sie ein Label vor die Entwicklung dieser neuen Funktion, falls müssen Sie diesen Vorgang abzubrechen und gehen wieder in den Zustand vorherigen dieser neuen Funktion)

eine Niederlassung zu bilden kann eine gute Lösung sein, vorausgesetzt, es verschmolzen zurück in regelmäßigen Abständen (alle 3 Wochen) auf dem Release-Zweig, und dann nach links aus. Es ist besonders empfehlenswert, wenn Sie einige Aktivitäten auf dem release_branch (wie einige heiße behobenen Fehlern) haben. dann müssen die beiden Bemühungen getrennt gehalten werden.

Im Grunde ist es läuft alles auf Ihre Merge Workflow Definition.

Lassen Sie Kommentare, wenn Sie mich zum Detail wollen einige Optionen, die Sie fühle ich mich nicht in der Tiefe genug Adresse hat.

In meinem Büro wir in der Regel arbeiten weg von 3 Filialen zu einem bestimmten Zeitpunkt.

  • Release: Hier wird der Code, der derzeit im Einsatz ist, wird markiert und gespeichert. Wenn wir dies keine kritische Fehlerbehebungen tun müssen, ist, wo die Arbeit getan ist. Wenn wir in der Regel eingesetzt, die Hotfix-Abschnitt des Schildes erhöhen (das heißt 1.19.0 -> 1.19.1).
  • QA: Hier wird der Code, der für die Kunden ist immer bereit ist, markiert und gespeichert. Dieser Zweig wird verwendet, wenn wir auf neue Arbeit beginnen, und einen Code haben, die derzeit von QA in Vorbereitung auf die nächste Lieferung getestet wird.
  • Main:. Hier laufen alle neuen Arbeit getan ist

In seltenen Gelegenheiten, bei denen wir müssen in einer vierten Linie zu entwickeln (aufgrund sehr enger Release Zeitplan), werden wir gelegentlich unsere Sandbox Codezeile öffnen. Obwohl typischer werden wir nur einen einzigen Entwickler arbeiten in Isolation haben und nicht einchecken, bis die Hauptleitung gelöscht wurde.

Mit der Verzweigung Strategie oben, konnten wir am Ende eines jeden Sprints mit einer Liefer wichtige Funktionsänderungen machen.

Es ist klingt nicht wie Sie wirklich in einer Scrum-Umgebung leben. Scrum erfordert das Team am Ende eines jeden Sprints getan werden, die nicht länger als vier Wochen (eher ein bis zwei Wochen) sollte dauern. Also, all paar Wochen, sollten Sie ein vollständig getestet haben, läuft, möglicherweise einsetzbares System jedenfalls.

Der einzige Weg, ich weiß, dass zu tun ist, umfassend zu haben, vollautomatische Suiten beiden Kunden- und Entwicklertests (wie Extreme Programming schreibt).

Ich bin mir nicht sicher, warum Sie Zweige in diesem Fall brauchen würden, aber ich verstehe auch nicht, warum es nicht wartbar sein würde. Nach meiner Erfahrung shorterlived der einen Zweig, desto besser.

Lizenziert unter: CC-BY-SA mit Zuschreibung
Nicht verbunden mit StackOverflow
scroll top