Dies ist ein heikles Problem, mit dem jedoch viele Menschen konfrontiert sind. Ich bevorzuge das Gitflow-Setup als Ausgangspunkt.
Entwicklung -> Neue Arbeiten am
Master -> Fertige Arbeiten, die getestet werden müssen Produktion -> Für die Produktion veröffentlichte Arbeiten .
Bei kleineren (kürzeren) Features erstelle ich einen Zweig aus der Entwicklung, erledige die Arbeit dort und füge den Zweig wieder zur Entwicklung zusammen.
Bei wichtigen (langfristigen) Features erstelle ich einen Zweig aus der Entwicklung, erstelle kleinere Zweige aus diesem Zweig und fasse dann zum ersten Zweig zusammen. Sobald das Hauptfeature fertig ist, geht es zurück in den Entwicklungszweig.
In regelmäßigen Abständen (projektabhängig) füge ich die Entwicklung wieder zum Master zusammen und ein Testzyklus beginnt. Wenn beim Testen Korrekturen auftreten, werden diese im Hauptzweig durchgeführt (Unterzweig wird dann zusammengeführt). Während des Testens kann die Entwicklung auf dem Master-Zweig fortgesetzt werden.
Der Master sollte jederzeit in die Entwicklung integriert werden, und die Entwicklung sollte in eine der langfristigen Unterzweigen integriert werden.
Der Master sollte (theoretisch) immer produktionsbereit sein. Die Entwicklung sollte (theoretisch) immer produktionsbereit sein. Der einzige Grund, warum es einen Unterschied gibt, ist die Bereitstellung einer soliden Reihe von Funktionen, die Tester testen können.
Wenn dies abgeschlossen ist, wird ein getestetes Commit in Master in die Produktion eingebunden, und die Bereitstellung in der Produktion erfolgt in diesem Zweig. Hotfixes, die im Notfall durchgeführt werden müssen, können dann in der Produktionsabteilung ausgeführt werden, ohne dass der Master zusammengeführt werden muss (was möglicherweise viele nicht getestete Änderungen zur Folge hat).
Mein normaler Baum sieht aus wie
LongTerm -> Development -> Master -> Production
LongTerm <- Development | |
| Development -> Master |
LongTerm <- Development -> Master |
Development <- Master |
Master -> Production
Es ist meine allgemeine Regel, dass eine einzelne Änderung nicht länger als ein paar Stunden dauern sollte. Wenn dies der Fall ist, müssen kleinere Änderungen vorgenommen werden. Wenn es sich um ein riesiges Feature handelt (wie ein UI-Re-Write), ist dies langfristig der Fall, sodass die normale Entwicklung zur gleichen Zeit fortgesetzt werden kann. LongTerm-Niederlassungen sind normalerweise nur lokale Niederlassungen, während Entwicklung, Master und Produktion entfernte Niederlassungen sind. Alle Unterzweige sind ebenfalls nur lokal. Dies hält das Repository für andere sauber, ohne die Nützlichkeit von Git für einen langfristigen Funktionsumfang zu verlieren.
Ich möchte jedoch darauf hinweisen, dass die Existenz einer langfristigen Niederlassung eine seltene Sache ist. Normalerweise befindet sich meine ganze Arbeit in der Entwicklung. Nur wenn ich ein Feature (Set) habe, das so lange dauert, dass ich auch mit normalen Entwickler-Dingen arbeiten kann, verwende ich den LongTerm-Zweig. Wenn es sich nur um eine Reihe von Änderungen handelt, die zusammengeführt werden sollen, füge ich sie erst dann zusammen, wenn alles erledigt ist.