Unser Unternehmen verwendet derzeit ein einfaches Verzweigungsmodell (Stamm/Release/Hotfixes) und würde gerne wissen, welche Verzweigungsmodelle für Ihr Unternehmen oder Ihren Entwicklungsprozess am besten geeignet sind.
-
Arbeitsabläufe/Verzweigungsmodelle
Im Folgenden sind die drei wichtigsten Beschreibungen aufgeführt, die ich gesehen habe, aber sie widersprechen sich teilweise oder gehen nicht weit genug, um die nachfolgenden Probleme zu lösen, auf die wir gestoßen sind (wie unten beschrieben). Daher ist unser Team bisher auf nicht so gute Lösungen ausgewichen. Machen Sie etwas Besseres?
-
Zusammenführung vs. Umbasierung (verworrene vs. sequentielle Geschichte)
Sollte man
pull --rebase
oder mit dem Zurückführen auf die Hauptlinie warten, bis Ihre Aufgabe abgeschlossen ist? Ich persönlich neige zum Zusammenführen, da dies eine visuelle Darstellung der Basis, auf der eine Aufgabe begonnen und beendet wurde, bewahrt, und ich bevorzuge sogarmerge --no-ff
zu diesem Zweck. Es hat jedoch andere Nachteile. Viele haben auch die nützliche Eigenschaft des Zusammenführens nicht erkannt - dass es nicht kommutativ (Das Zusammenführen eines Themenzweigs in den Hauptzweig bedeutet nicht, dass der Hauptzweig in den Themenzweig zusammengeführt wird). -
Ich bin auf der Suche nach einem natürlichen Arbeitsablauf
Manchmal passieren Fehler, weil unsere Verfahren eine bestimmte Situation nicht mit einfachen Regeln erfassen. Zum Beispiel sollte eine Korrektur, die für frühere Versionen benötigt wird, natürlich so weit stromabwärts angesiedelt sein, dass es möglich ist, sie stromaufwärts in alle notwendigen Zweige einzubringen (ist die Verwendung dieser Begriffe klar genug?). Es kommt jedoch vor, dass ein Fix es in den Master schafft, bevor der Entwickler merkt, dass er weiter stromabwärts hätte platziert werden sollen, und wenn dieser bereits gepusht (oder noch schlimmer, zusammengeführt oder etwas darauf basierendes) wurde, dann bleibt nur noch die Möglichkeit des Rosinenpickens, mit den damit verbundenen Gefahren. Welche einfachen Regeln wie diese verwenden Sie? Dazu gehört auch die Unannehmlichkeit, dass ein Themenzweig andere Themenzweige zwangsläufig ausschließt (vorausgesetzt, sie sind von einer gemeinsamen Basislinie abgezweigt). Entwickler wollen nicht ein Feature fertigstellen, um ein anderes zu beginnen, mit dem Gefühl, dass der Code, den sie gerade geschrieben haben, nicht mehr da ist
-
Wie kann man vermeiden, dass es zu Konflikten bei der Zusammenführung kommt (aufgrund von Cherry-Pick)?
Es scheint ein sicherer Weg zu sein, einen Merge-Konflikt zu erzeugen, wenn man zwischen Zweigen wählt, die nie wieder zusammengeführt werden können. Würde die Anwendung der gleichen Übergabe in revert (wie geht das?) in beiden Zweigen diese Situation möglicherweise lösen? Dies ist ein Grund, warum ich mich nicht traue, einen weitgehend Merge-basierten Arbeitsablauf zu fordern.
-
Wie zerfällt man in aktuelle Zweige?
Uns ist klar, dass es großartig wäre, eine fertige Integration aus Themenzweigen zusammenzustellen, aber oft ist die Arbeit unserer Entwickler nicht klar definiert (manchmal ist es einfach nur ein "Herumstochern") und wenn ein Teil des Codes bereits in ein "Verschiedenes"-Thema gegangen ist, kann er gemäß der obigen Frage nicht wieder aus diesem herausgenommen werden? Wie arbeiten Sie mit dem Definieren/Bewilligen/Graduieren/Freigeben Ihrer Themenzweige?
-
Angemessene Verfahren wie Code-Review und Graduierung wäre natürlich schön.
Aber wir können die Dinge einfach nicht genug entwirren, um das zu schaffen - haben Sie Vorschläge? Integrationszweige, Illustrationen?
Nachfolgend finden Sie eine Liste von Fragen zum Thema:
- Was sind gute Strategien, um die Hotfixing-Fähigkeit von bereitgestellten Anwendungen zu ermöglichen?
- Beschreibung des Arbeitsablaufs bei der Verwendung von Git für die interne Entwicklung
- Git-Workflow für die Linux-Kernel-Entwicklung in Unternehmen
- Wie pflegen Sie Entwicklungs- und Produktionscode? (Danke für este PDF!)
- Verwaltung von Git-Releases
- Git Cherry-pick vs. Merge-Workflow
- Wie man mehrere Übertragungen auswählt
- Wie führt man selektive Dateien mit git-merge zusammen?
- Wie man eine Reihe von Übertragungen auswählt und in einen anderen Zweig zusammenführt
- ReinH Git Arbeitsablauf
- Git-Workflow für Änderungen, die Sie nie in den Ursprung zurückschieben werden
- Eine Zusammenführung nach dem Zufallsprinzip auswählen
- Richtiger Git-Workflow für kombinierten OS- und privaten Code?
- Projekt mit Git verwalten
- Warum kann Git Dateiänderungen nicht mit einem geänderten Parent/Master zusammenführen.
- Bewährte Praktiken der Git-Verzweigung/des Rebasings
- Wann wird mich "git pull --rebase" in Schwierigkeiten bringen?
- Wie werden DVCS in großen Teams eingesetzt?
Lesen Sie auch, was Plastic SCM zu folgenden Themen schreibt aufgabenorientierte Entwicklung und wenn Plastik nicht Ihre Wahl ist, studieren Sie nvie's Verzweigungsmodell und seine unterstützende Skripte .