Wie lassen sich Produktversionen und Verzweigungen der Codebasis im Allgemeinen bei langfristigen Projekten, für die während des Produktlebenszyklus möglicherweise mehrere Releases vorliegen und die Unterstützung früherer Produkte erfordern, am besten handhaben?
Nehmen Sie genauer an, dass eine ordnungsgemäße verteilte Versionskontrolle vorhanden ist (z. B. Git) und dass die Teams klein bis groß sind und dass der Entwickler möglicherweise an mehreren Projekten gleichzeitig arbeitet. Das Hauptproblem ist, dass es eine vertragliche Verpflichtung gibt, alte Versionen zu unterstützen, wie sie zu der Zeit existierten, was bedeutet, dass Neuentwicklungen alten Code nicht patchen können (Microsoft Office-Produkte könnten ein Beispiel dafür sein, Sie erhalten nur Patches für das Spieljahr, das Sie besitzen).
Infolgedessen ist die aktuelle Produktversionierung ein bisschen kompliziert, da jedes Hauptprodukt mehrere Abhängigkeiten aufweist, von denen jede eine eigene Version hat, die sich zwischen den jährlichen Releases ändern kann. Während jedes Produkt über ein eigenes Repository verfügt, wird der größte Teil der Arbeit nicht auf dem Hauptquellstamm, sondern auf einem Zweig für die Produktfreigabe in diesem Jahr ausgeführt, wobei ein neuer Zweig erstellt wird, wenn das Produkt freigegeben wird, damit es unterstützt wird. Dies bedeutet wiederum, dass das Abrufen der Codebasis eines Produkts keine einfache Angelegenheit ist, wie man vielleicht bei der Verwendung der Versionskontrolle denkt.
Antworten:
Wie viel (und welche Art von) Struktur Sie benötigen, hängt stark davon ab, was Sie können möchten. Finde heraus, ohne was du nicht leben kannst, was du haben möchtest und was dir egal ist.
Ein gutes Beispiel für eine Reihe von Entscheidungen könnte sein:
Dinge, ohne die wir nicht leben können:
Dinge, die wir gerne hätten:
Dinge, ohne die wir leben können:
Wenn die oben genannten Ziele Ihre wären, könnten Sie einen Prozess wie den folgenden anwenden:
Dieser Prozess beantwortet nicht alle Ihre Fragen. Insbesondere benötigen Sie einen Prozess, um zu entscheiden, welche Korrekturen an einem Release-Zweig vorgenommen werden können, und um sicherzustellen, dass Fehler nicht zuerst in einem Release-Zweig behoben werden (solche Korrekturen) sollte nach Möglichkeit immer am Kofferraum getestet werden). Aber es gibt Ihnen einen Rahmen, in dem Sie solche Entscheidungen treffen können.
quelle
"Langfristig" ist ein Indikator dafür, dass Sie eine Versionierung benötigen , impliziert jedoch keine bestimmte Versionierungs- und Verzweigungsstrategie. Die interessantere Frage ist, wie viele Produktlinien oder Hauptversionslinien Sie unterstützen möchten (dies hängt vom Vertrag mit Ihren Kunden ab). Sie benötigen mindestens eine Niederlassung für jede Produktlinie / Hauptversionslinie, für die Sie einen Wartungsvertrag haben.
Auf der anderen Seite hängt es von Ihrer Teamgröße ab. Wenn Sie ein großes Entwicklungsteam haben, bei dem verschiedene Personen parallel an verschiedenen Features arbeiten, benötigen Sie offensichtlich mehr Feature-Zweige als bei einem Team von ein oder zwei Personen. Wenn Sie mit einem größeren Team arbeiten, sollten Sie die Verwendung der verteilten Versionskontrolle in Betracht ziehen, wodurch die parallele Arbeit an verschiedenen Zweigen (und deren spätere Wiedereingliederung in den Stamm) wesentlich effizienter wird.
quelle
Git ist ein Tool zur Versionskontrolle - es verwaltet Versionen von Dateien. Was Sie suchen, ist ein Konfigurationsmanagement-Tool. Es gibt diese zwar in ausreichender Menge, aber meistens zu hohen Preisen von Unternehmen wie IBM.
Tools zur Versionskontrolle bieten Verzweigungs- und Tagging-Funktionen, die ein rudimentäres Konfigurationsmanagement ohne zusätzliche Toolunterstützung ermöglichen. Daher verstehen viele Entwickler den Unterschied nicht. Ihre Bedürfnisse gehen wahrscheinlich über das hinaus, wofür GIT entwickelt wurde.
Mir ist nicht bekannt, aber ich bin mir sicher, dass es eine CM-Tool-Erweiterung für Git geben wird.
quelle
Diese Frage scheint einer anderen Frage , die ich kürzlich beantwortet habe , sehr ähnlich zu sein .
Kurz gesagt, dies klingt eher nach einem Produktdesign- und Distributionsproblem als nach einem Versionskontroll- / Verzweigungsproblem. Natürlich fällt es mir leicht, das zu sagen, und es fällt Ihnen schwerer, es zu beheben, wenn Sie bereits tief im Problem stecken.
Ohne die Besonderheiten Ihres speziellen Problems genauer zu kennen. Wenn ich jedoch mehrere Versionen von Produkten auf der Basis eines Codes hätte, der eine große Menge von gemeinsam genutztem Code zwischen den Produkten enthält, würde ich nach Möglichkeit versuchen, Produkte so umzugestalten, dass sie modularer werden und Stellen Sie sicher, dass die Module selbst keine zusätzliche Code-Verzweigung erfordern. Ich schaue mir auch mein Bereitstellungsmodell an, um festzustellen, ob es ein besseres Mittel gibt, um meine Kunden zu unterstützen und gleichzeitig einen Großteil der Codebasis einheitlich zu halten. Wenn eine spezifische Kundenanpassung erforderlich ist, müssen die Module möglicherweise genauer eingeteilt werden, um die Menge des duplizierten Codes im System zu verringern.
Es ist keine einfache Aufgabe, aber sie kann schrittweise behoben werden, wenn Sie den Job gut verwalten und wenn Sie die Arbeit so planen können, dass Sie nicht alles auf einmal "upgraden" müssen.
quelle