Wir verwenden GitHub Flow in unserem Projekt und öffnen die meiste Zeit einen neuen Feature-Zweig von master , erledigen dort einige Arbeiten, öffnen eine PR, überprüfen den Code und führen ihn wieder zu master zusammen .
Meine derzeitige Arbeit hängt jedoch von einem anderen Thema ab, an dem gerade gearbeitet wird feature-branch-A
. Ist es koscher , meinen Zweig aus diesem anderen Zweig zu erstellen, oder widerspricht das dem Geist von GitHub Flow?
Die Alternative wäre, meinen Zweig auf Master zu gründen und die Änderungen von feature-branch-A
(häufig) einzubinden.
Welche Option wird in GitHub Flow bevorzugt?
Ich denke, das ist völlig in Ordnung, wenn Sie das Feature in einem anderen Feature erstellen.
Aber mach das nicht so oft. Ich sehe einen Entwickler, der das gemacht hat, und ein oder zwei Wochen, in denen er 10 PR zum Zusammenführen rauswirft. Das war für andere Mitglieder völlig anstrengend und auch für das Zusammenführen schwierig. Versuche keine Bäume in git zu machen. Das hilft bei der Suche nach Fehlern.
quelle
Eine Schlüsselsache, die Git-Flow ansprechen sollte, war die Fähigkeit, über die Rolle eines bestimmten Zweigs nachzudenken und darüber, von wo er abzweigt und zu welchem Zweig er verschmilzt.
Im Idealfall werden alle Zweige auf die Codeline zurückgeführt, von der aus sie zusammengeführt wurden. Dies ist in der Regel eine Zusammenführung von der Hauptlinie (in Git-Flow ist dies
dev
). Feature-Verzweigungen verzweigen und von dev zusammenführen, Release-Verzweigungen verzweigen und von dev zusammenführen (mit einem zusätzlichen Merge nachmaster
). Hotfixes verzweigen und vom Master zusammenführen (mit diesem zusätzlichen Zusammenführen zurück zum Entwickler).Jede Codeline verzweigt sich von der übergeordneten Codeline und wird mit dieser zusammengeführt. Eine Codeline kann bei Bedarf jederzeit Code aus anderen Codelines abrufen.
Wenn es sich bei der Verzweigung aus einer Feature-Verzweigung um "Ich möchte auf diese Weise ein Problem in dieser Feature-Verzweigung beheben" handelt, ist dies in Ordnung. Es verzweigt vom Feature-Zweig, schreibt Code fest und führt zum Feature-Zweig zurück (oder wird verworfen).
Was Sie jedoch vermeiden möchten, sieht folgendermaßen aus:
Der Grund dafür ist, dass Anfang und Ende nicht übereinstimmen - es ist etwas schwieriger zu verstehen, was dies ist und war. Nicht unmöglich, aber es dauert ein bisschen länger, bis jemand seine Rolle versteht.
Wenn dies jedoch eine neue Funktion ist, die von Code abhängt, der noch nicht in dev gefunden wurde, sollte der Ablauf folgendermaßen aussehen:
Beachten Sie, dass dies mit einer Verzweigung von dev beginnt und mit einer Zusammenführung zu dev endet.
Alles, was gesagt wird, ist wahrscheinlich das Beste, das Zusammenführen von einem Feature zu einem anderen Feature zu vermeiden. Verzweigen Sie die Funktion, führen Sie alle erforderlichen Vorbereitungen durch ... und warten Sie.
Dies bietet die stabilsten Verzweigungen und den stabilsten Code.
Für die zukünftige Arbeit sollte eine Funktion zum Veröffentlichen der für die Interoperabilität mit anderen Funktionen erforderlichen Schnittstellen in Betracht gezogen werden - auch wenn der Implementierungscode nicht vollständig ist. Dies würde zu dev zusammengeführt, und das erforderliche Feature könnte dann von diesen Schnittstellen abarbeiten, ebenso wie das zukünftige Feature. Dies würde wahrscheinlich dazu führen, dass das zukünftige Feature weitere Fortschritte erzielt (Codierung anhand der Schnittstellen, Testen anhand von Stubbs, die die Schnittstellen implementieren), als wenn es warten müsste, bis das erforderliche Feature zu dev zusammengeführt wird.
quelle
required-feature
es eingearbeitet ist.Ein Feature-Zweig gilt normalerweise als weniger stabil als der Stamm (Entwickeln / Mastern), sodass Sie möglicherweise mehr zugrunde liegenden Änderungen unterliegen als normal, wenn Sie Ihre Arbeit auf einem Zweig aufbauen.
Auch wenn der Zweig normalerweise verpönt ist, wenn er verschoben wurde, ist es nicht ungewöhnlich, Feature-Zweige auf den übergeordneten Zweig zu verlagern, um eine schönere Historie zu erhalten. Dies wäre jedoch besonders kompliziert, wenn zusätzliche Zweige daran hängen würden im Wesentlichen eine neue Einschränkung für den übergeordneten Zweigstellenbesitzer sowie potenzielle Kopfschmerzen für sich selbst erstellen.
Das heißt, es gibt keine strenge Regel dagegen. Dies sind schließlich nur Muster und Best Practices.
Bearbeiten: Verpasster Teil Ihrer Frage. Durch das Zusammenführen des Feature-Zweigs zu einem eigenen Zweig, der auf dem Master basiert, werden die oben genannten Probleme nicht wirklich vermieden, und es kann sogar eine noch komplexere Geschichte erstellt werden.
Wenn ich also in Ihren Schuhen stecke und die Arbeit verschieben könnte, bis ein Feature fertig ist, oder zuerst etwas anderes tun würde, würde ich das tun.
quelle