Zum größten Teil ist dies der übliche Workflow, der bei allen bisher verwendeten VCS verwendet wird. Bei einigen (CVS, SVN) ist es schwieriger, bei GIT ist es trivial. Das heißt, ich habe zwei Bemerkungen:
Erstens gibt es zwei Denkschulen, wenn es um Feature-Zweige geht:
- Füge sie zusammen
- Rebase sie
(1) scheint der Artikel zu suggerieren. Das Problem bei Merge Commits sind sogenannte Evil Merges . Insbesondere diejenigen, die Entwicklungspfade verbinden, bei denen eine Funktion die Semantik in einem der Zweige geändert hat, die automatische Zusammenführung jedoch nicht alle Vorkommen im Code aus dem anderen Zweig korrigiert. Auf diese Weise eingeführte Regressionen sind bekanntermaßen schwer zu debuggen. Als GIT-Benutzer können Sie bei Regressionen in der Regel viel entspannter sein, da Sie git bisect
deren Ursachen automatisch für Sie finden müssen. In der beschriebenen Situation git bisect
wird jedoch auf das Zusammenführungs-Commit hingewiesen, was Ihnen überhaupt nicht hilft.
(2) vermeidet dieses Problem, indem versucht wird, eine möglichst lineare Historie aufrechtzuerhalten. Diese gegnerischen Rebases behaupten, dass alle Tests, die Sie möglicherweise vor dem Rebase durchgeführt haben, ungültig werden.
Persönlich bin ich fest im Lager (2), weil ich die Gültigkeit der git bisect
Ergebnisse mehr schätze als den potenziellen Verlust der Testabdeckung, der durch die Verwendung eines geeigneten CI-Systems leicht kompensiert werden kann.
Zweitens habe ich für mich entschieden, dass es selten eine gute Idee ist, zwischen Entwicklern zu wechseln. Es gibt Sicherheitsprobleme, die dazu führen, dass jeder in Ihre Box ssh kann, um Git-Deamon abzurufen oder lokal auszuführen, und, was noch wichtiger ist, in Teams, die nicht extrem klein sind, kann das Versehen ziemlich schnell verloren gehen.
Trotzdem bin ich für ein Staging-Repository (manchmal auch als Scratch bezeichnet ), mit dem die Unterteams ihre laufenden Arbeiten über einen zentralen Server teilen können, der sich jedoch vom Hauptserver unterscheidet (häufig nach außen). gegenüber, wenn nicht öffentlich). In der Regel verwaltet jedes Subteam einen Themenzweig für sich, und ein CI-System führt periodische Octopus-Zusammenführungen aller Themenzweige zu einem großen Integrationszweig durch, um sich über Konflikte und Erstellungsfehler zu beschweren.
git bisect
wurde als Grund angegeben, die flache Strategie auch dann beizubehalten.git bisect
allein zu tun . Dies geschieht, wenn Merkmal A eine Funktion ändert, die auch Merkmal B verwendet. Alle Tests werden sowohl in A als auch in B vor dem Zusammenführen bestanden. Nach dem Zusammenführen können die Tests jedoch aufgrund inkompatibler Änderungen zwischen A und B unterbrochen werden. Siegit bisect
können jedoch einen Zweig nicht teilweise auf einen anderen anwenden. Daher ist der einzige Hinweis, dass das Zusammenführen festgeschrieben wird ist, als der Fehler eingeführt wurde.Ich bin derzeit dabei, umfangreiche und langjährige Refactorings durchzuführen (Konvertieren einer Anwendung von einem in ein anderes GUI-Toolkit) und einen erfolgreichen, auf die Basis ausgerichteten Workflow durchzuführen, da andere Teammitglieder weiterhin an neuen Funktionen arbeiten:
Es gibt hauptsächlich zwei Hauptzweige, den Bereich,
master
in dem die neuen Funktionen entwickelt werden, und dentoolkit-conversion
Zweig. Die wichtigste Regel ist einfach: Machen Sie nur Dinge in dertoolkit-conversion
Branche, die für die Konvertierung relevant sind. Immer wenn immaster
(alten GUI-Toolkit) etwas getan werden kann , mache ich es dort und stelle meinetoolkit-conversion
Änderungen auf den neuenmaster
Kopf. Eine andere Regel ist, dentoolkit-conversion
Zweig ziemlich kurz zu halten . Daher verwende ich oft Reset, Cherry-Pick und Amendment-Commit und Rebase, um kleinere Commits auf größere zu kleben (die am Ende den gleichen Zweck haben). Dies funktioniert auch gut, wenn ich etwas ausprobiert habe, das nicht gut funktioniert hat, um die Änderung rückgängig zu machen, oder nachdem ich einen Code mit temporärem Hilfecode überarbeitet habe.Ich habe gegen Änderungen aus der Verschmelzung beschlossen
master
intoolkit-conversion
Zweig, weil sie es viel schwieriger machen würden früher Commits rebase den Zweig sauber und einfach zu Auge zu behalten. Außerdem können Zusammenführungen zu Konflikten führen, deren Lösungen nicht so klar sind wie bei einer sauberen Historie.Natürlich hat dieser Workflow auch Nachteile. Das wichtigste ist, dass es nur für eine einzelne Person gut funktioniert. Immer wenn ich den
toolkit-conversion
Zweig nach dem erneuten Basieren auf den Kopf vonmaster
zwinge, wird es schwierig, ihn in ein anderes Repository zu ziehen (das automatische erneute Basieren auf den Verfolgungszweig schlägt häufig mit Konflikten fehl).Am Ende
toolkit-conversion
bleibt meine Filiale kurz, sauber und leicht zu überprüfen. Ich konnte mir nicht vorstellen, dies ähnlich mächtig mit z. B. SVN zu tun.quelle
In der Firma, in der ich gerade arbeite, wenden wir seit einiger Zeit eine Variation desselben Verzweigungsmodells an. Wir haben auch Scrum verwendet, um einen Zweig pro Story-Workflow zu erstellen.
Das einzige Problem, das wir bisher hatten, ist, wenn das Team groß genug ist und mehr als eine Geschichte gestartet werden kann und diese Geschichten voneinander abhängig sind, wird es zu einer Art Chaos, Änderungen zwischen Zweigen und zurück zum Meister zusammenzuführen.
Außerdem hat sich dies als vertrauenswürdig erwiesen :).
quelle
Ich bin gerade damit beschäftigt, diesen Workflow anzupassen. Ich denke, dies ist ein ziemlich guter Workflow, da er das Verzweigungsmodell verwendet, in dem sich Git auszeichnet.
Der einzige kleine Nachteil ist, dass es etwas Disziplin erfordert, diesen Workflow beizubehalten und nicht zu versuchen, Verknüpfungen zu verwenden.
Die Entwickler von kohana verwenden diesen Workflow ebenfalls und sie scheinen ihn sehr zu mögen.
quelle
Wir verwenden einen ähnlichen Workflow bei der Arbeit, der jedoch etwas weniger kompliziert ist. Es ist jedoch stark von diesem Workflow inspiriert, da ich diesen Artikel oft gelesen habe. Ich habe sogar das PDF des Verzweigungsmodells in Farben neben meinem Schreibtisch gedruckt :)
Produktiv. Wie definieren Sie Produktivität? Meiner Meinung nach ist es am wichtigsten, eine hohe Qualität zu haben, zumindest um immer eine bessere Qualität zu erreichen. Ständige Verbesserung des Prozesses usw. Wenn Sie Qualitätscode erstellen können, wird die Produktivität davon profitieren. Die Frage ist also wirklich: Verbessert dies die Qualität der Software? Und meine Antwort darauf lautet definitiv ja.
Was ich an dieser Art von Verzweigungsmodell am meisten liebe, ist, dass es Verzweigungen in verschiedenen Qualitätsschichten einführt. Je weiter rechts im Bild, desto höher die Stabilität und desto höher die Qualität. Der Master-Zweig ist heilig und alle Commits sollten als stabile Versionen der Software angesehen werden. Je weiter Sie nach links gehen, desto experimenteller und desto geringer ist die Stabilität.
Sobald Sie neue Funktionen und Fehlerbehebungen testen, können Sie diese schrittweise von links nach rechts übertragen und so Code mit hoher Qualität einfügen, genau dann, wenn Sie wissen, dass der Code die Qualitätsanforderungen erfüllt, die Sie an den Code stellen. Zumindest theoretisch, da Sie nicht alles zu 100% testen können und sicher wissen, dass der Code keine Fehler enthält, da er immer Fehler enthält. Aber es ermöglicht Ihnen, ein hohes Vertrauen zu behalten.
Nichts ist für einen Programmierer schlimmer, als in einem System zu arbeiten, in dem niemand Vertrauen in den Code hat, weil er weiß, dass er nur scheiße ist und dass es eine Menge Fehler darin gibt.
Es ist wichtig, dass Sie Ihr Verzweigungsmodell durchdenken, damit es gut zu den Anforderungen Ihres Unternehmens passt. Nur weil dieses Modell für manche Menschen gut funktioniert, heißt das nicht unbedingt, dass es für andere optimal oder wünschenswert ist.
Es gibt immer Kompromisse und auch in diesem Fall. Ein Kompromiss ist die Anzahl der Filialen gegenüber der Komplexität. Durch die Einführung vieler verschiedener Zweigstellentypen erhöhen Sie die Komplexität des Workflows. Zum Beispiel kann es einfach falsch sein, Leute immer zu zwingen, einen neuen Feature-Zweig zu erstellen, wenn sie versuchen, einen einfachen Fehler durch Ändern einiger Codezeilen zu beheben.
Wir alle wissen, dass Fehler mehr oder weniger kompliziert zu lösen sind. Wenn also ein trivialer Fehler entdeckt wird, möchten Sie möglicherweise die Komplexität und Verwaltung reduzieren, um zusätzlichen Aufwand zu vermeiden und die Leute direkt an den Master oder den Entwicklungszweig zu binden. Da die Art Ihrer Korrekturen jedoch komplizierter wird, lohnt sich der zusätzliche Aufwand, um neue Zweige für sie zu erstellen. Vor allem, wenn Sie sich über Größe und Länge nicht sicher sind oder wenn Sie die Zusammenarbeit zwischen Ihnen und den anderen Entwicklern verbessern möchten.
Dies ist zweifellos ein guter Ansatz und passt möglicherweise in die meisten Fälle, da die meisten von uns ähnliche Entwicklungsprozesse haben, aber möglicherweise nicht für jeden geeignet. Ich fordere Sie dringend auf, darüber nachzudenken, wie Sie jetzt mit Ihrem Code umgehen, und zu versuchen, ein Verzweigungsmodell zu erstellen, das zu dem passt, das Sie bereits haben.
Der wichtigste Punkt ist, mit Git zu beginnen und der Rest wird natürlich folgen. Fangen Sie einfach an und verbessern Sie sich allmählich! Seien Sie kreativ!
Prost
quelle