Frage

Ich versuche, über die beste Verzweigung Strategie für ein Web-Anwendung-Projekt zu entscheiden. Hier ist, was ich habe zu kommen mit bis jetzt, und ich würde keine Kommentare und Erfahrungen sehr zu schätzen wissen.

So wie ich es sehe gibt es zwei Hauptverzweigungsstrategien: „Zweig durch Freisetzung“ und „Zweig nach Merkmal“

.

"Niederlassung durch Freigabe" : Die Entwicklung erfolgt auf dem Stamm. Wenn die Zeit für eine Veröffentlichung in der Nähe ist, ist ein Zweig für diese Version gemacht. Dieser Zweig wird dann stabilisiert / geprüft und schließlich eine Freigabe erfolgt. Nach der Veröffentlichung, ist der Zweig fusioniert zurück in den Kofferraum, während des Release-Zweig für Bug-Fixing am Leben zu halten. Ist ein Bug-Fix angewandt wird, dann wird es in den Stamm zusammengeführt (wenn die Entwicklung auf dem Stamm nicht den Fehler in anderen Mitteln verfinstert hat). Neue Funktionen werden den Stamm hinzugefügt und nicht den Release-Zweig beeinflussen. Wenn eine neue Version zur Neige geht, wird ein neuer Release-Zweig wird a.s.o erstellt.

"Zweig nach Merkmal" : Der Stamm ist immer die "Herstellung" Stamm (der Code, der unter Spannung steht). Fehlerbehebung sind direkt mit dem Stamm verpflichtet. Features für die nächste Version entwickelt werden, in Funktion branches.Bugfixes von Zeit zu Zeit in die Features Zweige zusammengeführt werden. Wenn Release-Zeit kommt, werden die Funktionen verzweigt sich in den Stamm integriert und der Zyklus des Lebens weiter.

Nun ist die Art, wie ich es der große praktische Unterschied zwischen diesen beiden Strategien zu sehen ist, dass „durch Freigabe“ ermöglicht es Ihnen, verschiedene Produktionsversionen Sie Software maintane (wenn Client A hat Version 1 und Client B Version 1.5 Client ist die Zahl Kunden in diesem Fall). Im Gegensatz die „nach Merkmal“ Strategie verwenden Sie nur die aktuelle Produktionsversion unterstützen kann (alle Clients verwenden die neueste Version).

Da in einem typischen Web-Anwendung alle Kunden sind gleich „neueste“ Version mit (da sie alle Zugriff auf die gleichen Server), würde ich davon ausgehen, dass die „nach Merkmal“ -Ansatz ist die am häufigsten benutzt. Es beseitigt die Notwendigkeit, merge „über die Hierarchie“, sagen, wenn ein Bugfix für alle 3-Release-Versionen angewendet werden muss.

So ist mein aktueller Status ist, dass ich mit „Zweig nach Merkmale“ gehen sollte. Wenn es darauf ankommt, ist mein Team nicht sehr geschickt.

War es hilfreich?

Lösung

Wenn Sie nur eine Freigabe Live jederzeit haben, und Sie tun alle Entwicklung in einem einzigen Funktionszweig, dann sind diese Ansätze wirksam gleich.

Wenn Zweig-by-Funktion für Sie bedeutet zugleich eine mehrere Zweige auf dem Sprung ist, würde ich es wie die Pest meiden. Weitere Zweige Mittel mehr Verschmelzen, was einen Schmerz an sich ist, und mehr Integration hell. Es ist viel besser kontinuierliche Integration zu einer einzigen Codezeile zu tun.

Wenn Ihr Bereitstellungsprozess ist nicht mehr beteiligt als Zweig, Test, Produktion gehen, dann ein Vorteil der Zweig-by-Release ist, dass Sie mehrere Release Zweige gehen auf einmal, in verschiedenen Phasen haben kann: ein Live und wird bugfixed als notwendig, und ein weiterer stabilisiert wird, getestet, durch die Annahme gehen, usw., während der Entwicklung auf dem Stamm weiter. Wenn Sie einen Live-Stamm haben, auf der anderen Seite, wenn Sie einen Funktionszweig mit dem Ziel zusammenführen zu nehmen sie leben, haben Sie Ihre Fähigkeit zu tun, Fehlerbehebung auf das aktuelle Live-System verloren. Der Funktionszweig merge wird zu einem Punkt ohne Wiederkehr.

Andere Tipps

Welche Software entwickelst Du? Schrumpffolie? Open Source-Projekt? Wenn ja, dann weiter mit dem „Zweig durch Freisetzung“ oder „instabil Stamm“ -Ansatz. Vor allem, wenn Sie Ihre Release-Zyklen sind alle sechs Monate bis ein Jahr auseinander.

Aber wenn Ihr ein webbasiertes Projekt beibehalten, die Änderungen auf kürzeren Frequenzen ausgehen hat, wie einmal alle paar Wochen oder weniger, dann mit dem „Zweig nach Merkmal“ gehen oder „stabilen Stamm“ -Ansatz. Das Problem bei diesem Ansatz besteht darin, mehr Funktionsänderungen zu integrieren, die radikalen Veränderungen haben die Mergeprozesses weniger als Spaß machen. Es ist einfach wirklich schwierig wird.

Aber beide dieser Arbeit gut, aber was ist, wenn Sie beide brauchen? Das heißt, Sie haben ein Projekt, das sagt entfaltet einmal alle paar Wochen mit großen Funktionsänderungen, aber Sie feststellen, dass Sie eine Reihe von Fehlerbehebungen haben, dass Sie nicht für die Funktion bereit sein, ändert sich warten. Trunk ist Ihr Release-Zweig mit dem „Zweig nach Merkmale“ -Ansatz. Was passiert, wenn man beiden Versionen bekommen könnte und ihre eigene Niederlassung verfügt?

Sehen Sie sich diese Blogeintrag von CollabNet Bob Bogenschütze. Seine Agile Freigabestrategie gibt Ihnen am besten von beiden. Ich habe diese verwendet. Es ist extrem flexibel. Auch wenn Bob nicht zeigen es in seinem Diagramm, können Sie mehrere Release Zweige gehen zur gleichen Zeit haben. Diese Mittel könnten Sie einen Release-Zweig haben, die für die Einführung bis zur Produktion bereit ist, und eine andere, die für die endgültige QA-Prüfungen vorbereitet. Aber zwei Dinge zu beachten:

Erstens: Wie gut sind Ihre Entwickler bei Fusion? Sie können den den agilen Release-Strategie-Ansatz nicht selbst tun, auch wenn es ein kleines Team ist. Jeder hat ihren Teil zu tun, und sie müssen wirklich verstehen, Zusammenführung und die Werkzeuge, die sie mit der Zusammenführung zu tun.

Zweitens, werden Sie einen guten Überblick über die Veränderungen, die bereit und diejenigen brauchen, die im Begriff sind, zu sein. Release-Management ist der Schlüssel, um diese Arbeit wie ein Uhrwerk. Jedes Merkmal, wenn Sie fertig sind, müssen mit einem Release-Zweig zugewiesen bekommen und ihm verschmolzen.

Was den Ansatz, den Sie wählen, es kommt darauf an, was Sie entwickeln und die Häufigkeit der Änderungen, die Sie für diese Entwicklung sind die Freigabe.

Auf die Gefahr der Verwechslung Sie weiter: Sie können Release Zweige haben und machen alle Änderungen auf Feature Zweige. Diese Dinge sind nicht gegenseitig aus.

Das wird gesagt, es klingt wie Sie nicht parallel Release Familien brauchen und Sie wollen oft implementieren, vielleicht sogar kontinuierlich . So würden Sie einen „stabilen Stamm“ haben, dass Sie jederzeit freigeben können. Feature Zweige helfen, den Kofferraum stabil zu halten, weil man nur auf den Stamm wieder zusammenführen, wenn die Änderungen fertig sind und sich bewährt haben.

Also ich würde sagen, dass Ihre Wahl eine gute Passform ist.

.

Diese Entscheidungen sind nicht aus - beide verwenden Sie lösen verschiedene Probleme:

„Niederlassung durch Freigabe“ - Release-Zweig wird verwendet, wenn die Quelle, um sicherzustellen, kann verwendet sichert die aktuelle Live-Version (oder frühere Versionen veröffentlicht), während die nächste Version in der Entwicklung zu produzieren. Z.B. Dies ist, um Änderungen in die Release-Version für Bug-Fixes oder Backpatch-Features von der aktuellen Entwicklung Stamm zu machen.

„Zweig nach Merkmal“ -. Verwendet jederzeit eine stabile Entwicklung Stamm zu halten, die für mehrere Entwickler besonders nützlich ist und für experimentelle „vielleicht“ Eigenschaften

würde ich beide verwenden, aber Sie können einen von verzichten die Ansätze, wenn das Problem löst es für Sie nicht gilt, oder wenn Sie eine andere Lösung dieses Problem.

Ich empfehle eine moderne DVCS wie git oder Mercurial verwenden. Sie sind an den parallelen Entwicklung ausgerichtet, so dass sie Änderungen speichern anders als ältere Systeme, die viel vernünftigere machen verschmelzen.

Ich neige dazu, Git für meine Projekte zu verwenden, aber der Prozess, den ich zu folgen neigen geht so (und soll für Subversion auch funktionieren):

  • für jede neue Funktion, erstellen Sie einen Zweig für diese Funktion.
  • Wenn alles funktioniert, führen Sie sie in die staging Zweig, und stellen Sie sie in den Staging-Server (Sie tun, einer von denen haben, nicht wahr?)
  • Sobald wir sicher sind, dass der Kunde mit glücklich ist, was auf Inszenierung, verschmelzen wir die Inszenierung Zweig in den Produktionszweig, Tag als so etwas wie production_release_22 oder production_release_new_feature_x, und dann den Tag auf den Produktionsserver bereitstellen.

Stichworte sind nie immer aktualisiert - einmal etwas entfaltet wird, das bleibt so, bis weitere Änderungen gebaut, getestet und markiert - und dann der neue Tag ist im Einsatz. Indem sichergestellt wird, dass es -Tags immer im Einsatz und nicht Zweige , halte ich mich (oder andere) zu tun, Dinge wie: „Ich werde nur diese eine schnelle Änderung zu übernehmen und aktualisieren die Server, ohne es zu testen“.

Es ist ziemlich gut für mich gearbeitet, so weit.

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