Was ist die empfohlene Methode, um die aktuelle Entwicklung von der Wartungsentwicklung in der Versionskontrollsoftware zu trennen?

10

Ich habe eine Softwareanwendung mit Git verwaltet. Ich habe gerade eine neue Version 2.x veröffentlicht, die ich langfristig beibehalten möchte (meistens Fehlerbehebungen). In der Zwischenzeit möchte ich mit der Arbeit an Version 3.x beginnen. Was ist der empfohlene Weg, um dies zu verwalten? Sollte ich einen Zweig für Version 2.x erstellen und die 3.x-Entwicklung auf dem Master haben? oder andersherum?

Laurent
quelle
Habe verschiedene Branchen für Entwicklung und Stall.
Oded
Was geht also normalerweise in die Hauptniederlassung? (bis jetzt mache ich dort immer alles)
Laurent
Sie müssen entscheiden, was Sie mastermeinen möchten . Es ist nur ein Etikett.
Oded

Antworten:

13

Hier wurde eine sehr interessante Vorgehensweise beschrieben: Ein erfolgreiches Git-Verzweigungsmodell

Ich fand es sehr faszinierend, habe es aber noch nicht benutzt.

Sehr gut, wie angefordert eine (sehr) kurze Zusammenfassung dessen, was der Artikel sagt:

  • Der Master-Zweig repräsentiert nur alle abgeschlossenen Meilensteine ​​(dh Version 1.0, 1.1, 1.2 usw.)
  • Die Entwicklung erfolgt in einem eigenen Zweig (bequemerweise "Entwickeln" genannt, wer hätte das gedacht?). Der Entwicklungszweig wird immer dann wieder mit dem Hauptzweig zusammengeführt, wenn eine vollständige Version der Funktion erstellt wurde.
  • Von der Entwicklung abzweigen sind Feature-Zweige. Diese stellen einzelne Funktionen für die nächste (oder zukünftige) Version dar. Sie verschmelzen wieder mit dem Entwicklungszweig.
  • Ein weiterer Zweig aus der Entwicklung ist der "Release" -Zweig. Dies ist ein Zweig, der eine fast vollständige Release-Version darstellt, bei der nur geringfügige Details bereinigt werden müssen. Es verschmilzt mit dem Entwicklungszweig und letztendlich mit dem Master-Zweig
  • "Hotfix" verzweigt von der Hauptniederlassung, wenn Sie in einer Ihrer Versionen einen schwerwiegenden Fehler finden (dh "Wenn die Verwendung in den Konami-Code eingeht, formatiert unser Programm die Hauptfestplatte neu ..."). Es verzweigt von der Buggy-Version und wird nach Abschluss des Fixes wieder in den Hauptzweig UND den Entwicklungszweig zusammengeführt.

Das ist das kurze daran, aber glauben Sie mir, dass der Artikel es ausführlicher beschreibt und mit der hilfreichen Visualisierungsgrafik viel einfacher zu verstehen ist.

Sorcy
quelle
2
Sie sollten eine Erklärung zu Ihrem Vorschlag in die Antwort aufnehmen. Vorzugsweise müssen die Benutzer dem Link nicht folgen, um sich einen Überblick über das Modell zu verschaffen. Links haben die schlechte Angewohnheit, schief zu gehen, und Antworten sollten für sich allein stehen ...
Yannis
+1 So ziemlich das, was wir bei der Arbeit verwenden, und es funktioniert wirklich.
Ed James
1
Ich glaube, dies wird allgemein als "Stable Trunk" - oder "Feature Branch" -Modell bezeichnet.
Sleske
"Der Hauptzweig repräsentiert nur alle fertigen Meilensteine ​​(dh Version 1.0, 1.1, 1.2 usw.)" Ich würde keinen Hauptzweig mit den Versionen 1.0, 1.1, 1.2, 2.0, 1.3, 2.1, 1.4, 2.2, 3.0, 1.5 in wollen Diese Reihenfolge wäre wirklich verwirrend. Ich vermute, dass implizit davon ausgegangen wird, dass es höchstens einen Stream gibt, auf dem Releases ausgeführt werden. Dies ist in meiner Praxis nicht der Fall. Es gibt Early Adopters und Leute, die etwas Stabileres wollen.
AProgrammer
Auf lange Sicht ist eine Filiale nichts anderes als ein Etikett, damit Sie leichter wissen, was dort passiert. Wenn es Ihnen auf diese Weise nicht gefällt, hindert Sie nichts daran, den Master-Zweig nur für stabile Bürgermeister-Releases zu verwenden und einen "Test" -Zweig (oder wie auch immer Sie ihn nennen möchten) für kleinere inkrementelle Releases zu haben.
Sorcy
5

Mein Prinzip ist, dass je kurzfristiger der Zweig ist, desto tiefer sollte er in der Zweigstruktur sein und desto spezifischer wird sein Name sein. Je längerfristig der Zweig ist, desto flacher wird er in der Zweigstruktur sein und allgemeiner wird sein Name sein.

Sie behalten also Ihren Master für die längerfristige (3.X) Version und benennen diesen Zweig weiterhin mit einem generischen Namen (Master, Trunk, Devel, ...) und nicht mit einem bestimmten Namen (Release-Code-Name oder noch schlechtere Release-Nummern) die in der Praxis zu stark von einer späten Marktentscheidung abhängen)

In einem System wie git, das einen flachen Namensraum für Zweige hat und in dem Zweige gleichwertig sind, spielt das keine Rolle. Bei einem System wie clearcase mit einem hierarchischen Namespace für Zweige ist es wichtiger (der vollständige Name des V4-Zweigs wird am Ende main / v1 / v2 / v3 / v4 ...)

Ein Programmierer
quelle
+1, außer ich weiß nicht, was tief und flach in diesem Zusammenhang wirklich bedeutet. Vielleicht könnten Sie diese Begriffe ein wenig erweitern?
Michael Durrant
Denkt an Äste, die einen Baum machen. Sie können aus dem Stamm oder einem anderen Zweig herauskommen. Flach bedeutet, dass die Anzahl der Verzweigungsschritte zwischen dem Zweig und dem Stamm gering ist, tief bedeutet, dass die Anzahl der Verzweigungsschritte wichtig ist. Was klein und wichtig ist, ist größtenteils relativ, aber ich habe Schemata gesehen, bei denen jede Neuerscheinung einen Schritt weiter war als die vorherige aus dem Kofferraum. Wenn Sie einen flachen Namespace verwenden, ist das nicht so schlimm. Wenn der Namespace hierarchisch ist (Clearcase, CVS, RCS, Perforce können ebenfalls so verwendet werden), erhalten Sie immer längere Namen.
AProgrammer