Im Git-Flow-Modell wird Ihre "neueste Version" tatsächlich der Version zugeordnet master
, während Ihre "Vorschau-Version" einem Git-Flow- release
Zweig zugeordnet wird. Es wird gegabelt develop
und schließlich zusammengeführt, master
wenn die eigentliche Veröffentlichung erfolgt. Dann wird dies Ihre "neueste Version" und Sie werden normalerweise nur Fehler für diese Version mithilfe von Git-Flow- hotfix
Zweigen beheben . Auf diese Weise stellt Ihr master
immer den stabilsten Status Ihrer neuesten veröffentlichten Version dar.
Wenn Sie Fehler für ältere Releases beheben oder andere Entwicklungen dort durchführen möchten, wird ein support
Zweig aus dem entsprechenden Commit in gegabelt master
(Sie haben alle Versionen, die jemals dort erstellt wurden). support
Zweige sind noch experimentell ( gemäß den Dokumenten ) und nicht gut dokumentiert. Aber wie Sie in der Befehlszeile sehen können, helfen Sie:
usage: git flow support [list] [-v]
git flow support start [-F] <version> <base>
Diese Zweige werden gerade erst gestartet und sollen nicht zu master
noch zusammengeführt werden develop
. Dies ist normalerweise in Ordnung, da Korrekturen an "alten" Versionen oder Funktionen, die von Kunden zur Implementierung in "alten" Versionen angefordert wurden, nicht verwendet werden können oder sollten master
. Wenn Sie immer noch der Meinung sind, dass Sie einen Fix auf Ihre Hauptentwicklungslinie (dargestellt durch master
und develop
) portieren möchten , starten Sie einfach a hotfix
, wählen Sie Ihre Änderungen aus und beenden Sie den Vorgang hotfix
.
git flow support
ist nicht experimentell markiert.Sieht meistens wie ein mentales Modell aus, bei dem die Zweige etwas zu stark betont werden. Ich bin damit einverstanden, dass Sie die von Ihnen freigegebenen Commits einfach markieren können, anstatt sie wieder mit dem Master zusammenzuführen.
Das Bild ist allerdings hübsch. Wenn Sie alles wieder in Master zusammenführen, erhalten Sie einen klaren Hinweis auf die Releases in zeitlicher Reihenfolge, anstatt Versions-Tags über das gesamte Diagramm zu verteilen.
Ich denke, dieses Modell funktioniert jedoch nicht zur Fehlerbehebung in älteren Versionen. Es bringt die ordentliche Bestellung durcheinander.
Um Ihre Frage zu beantworten: Ich denke, dies ist ein Regelwerk, das in einigen Fällen ein einfaches mentales Modell darstellt. Nicht alle Regeln sind aus rein technischer Sicht sinnvoll, aber das macht sie nicht schlecht. Mentale Modelle sind gut für sie Menschen.
quelle
support
Zweige wurden zur Fehlerbehebung in älteren Versionen entwickelt, obwohl sie immer noch als "experimentell" gekennzeichnet sind.Ich persönlich denke, der erwähnte Git-Flow ist zu kompliziert.
Wenn Sie GitHub verwenden, versuchen Sie das
GitHub flow
(wie von Scott Chacon beschrieben).Es ist besonders nützlich für die Zusammenarbeit bei mehreren Funktionen, die Codeüberprüfung und die Kombination mit Ihrer Continuous Integration-Lösung mithilfe von
Commit Status API
.UPDATE : Es gibt eine neue offizielle Website von The GitHub Flow ™
UPDATE 2 : Es gibt einen neuen offiziellen (und vereinfachten) GitHub-Leitfaden für The GitHub Flow ™: https://guides.github.com/introduction/flow/
quelle
master
einer Anomalie der Chronologie des Werkes zusammengeführt werden.support
Zweige gedacht . Aber Sie haben Recht, es ist in der Tat eine Anomalie, dass solche Releases nicht wieder zusammengeführt werdenmaster
, was nach meinem Verständnis alle Produktions-Releases enthalten sollte.In meinem Fall habe ich zwei Versionen derselben Software, deren Grundlagen identisch sind, aber jede Version hat einige unterschiedliche Funktionen.
Also erstelle ich zwei
worktree
, das heißt, ich erstelle zwei relevante, lang laufende Zweige neben dem Master.Dann habe ich:
Es gibt ein Repository, aber ich habe 3 separate Ordner nebeneinander für jeden Zweig oben. Und nehmen Sie die allgemeinen Änderungen im Master vor. Führen Sie es dann mit beiden anderen Versionen zusammen.
Spezifische Änderungen jeder Version werden ebenfalls in den entsprechenden Ordner übernommen, und die Arbeiten an jedem Projekt sind isoliert, und die IDE wird nicht verwechselt.
Hoffentlich hilft das.
quelle
Stimme voll und ganz @Mot zu.
Es ist schön, die gleichen Fragen zu hören.
Unser Team wurde auch nach mehr Universal-Verzweigungsmodellen als nach Successfull gesucht. Dh wie oben erwähnt @Mot - die Hauptidee besteht darin, die Einführung zusätzlicher Repositorys zur Unterstützung von Release- * -Zweigen in separaten * .git-Repos zu vermeiden, wie dies beispielsweise von kernel.org für stabile Releases durchgeführt wird. Aber kernel.org tut es, um die heruntergeladenen Größen zu minimieren, denke ich.
Für mich scheint es sauberer zu sein, Master als Hauptlinie für die Entwicklung zu haben .
Es gibt auch einige Konflikte beim Release- * Zusammenführen des Modells, um es zu meistern und anschließend mit der Idee zu versehen
Das Finishing (Zusammenführen und Markieren) ist keine atomare Transaktion:
und wenn git hook mit Unterstützung für die automatische Versionierung erstellt wird:
dann kann eine fehlerhafte Version erstellt werden für:
Ich weiß, dass die Versionierung in Successfull One einen Bump-Version-Prozess einführt , aber nicht automatisch.
Zusammenfassend lässt sich sagen, dass die wichtigsten Unterschiede, die wir beim Verzweigungsmodell für Releases * zum Zusammenführen und Markieren einführen, folgende sind: - Kennzeichnen von Releases beim Erstellen des Zweigs - Beibehalten des Zweigs des Releases, um die zukünftige Wartung zu ermöglichen
quelle
Der Hauptzweig sollte IMMER Ihre Produktionscodebasis darstellen, daher führen Sie den Code immer direkt nach einer Produktionsfreigabe wieder zum Master zusammen.
Das Tagging wird verwendet, um den genauen Code zu "merken", der in einer Produktionsversion enthalten war, sodass Sie später zurückgehen und den Code analysieren können, wenn ein Fehler aufgetreten ist.
Theoretisch sollte es keine Rolle spielen, ob Sie Ihren Code im Release-Zweig oder im Master-Zweig markieren, nachdem Sie ihn wieder mit dem Master zusammengeführt haben. Ich persönlich bevorzuge es, den Code im Release-Zweig zu markieren, da dies genau der Code ist, der in den Build / Release eingefügt wurde (vorausgesetzt, bei der Zusammenführung kann etwas schief gehen).
Das Problem mit dem Entwicklungszweigkonzept ist, dass es Single-Threaded ist. Brendan erwähnte in diesem Thread eine Strategie, die mit einem Entwicklungszweigkonzept angewendet werden könnte.
quelle