D'une manière générale, pour les projets à long terme qui peuvent avoir plusieurs versions au cours du cycle de vie des produits et nécessiter la prise en charge des produits précédents, quelle est la meilleure façon de gérer les versions des produits et la ramification de la base de code?
Dans un sens plus spécifique, supposez qu'un contrôle de version distribué approprié est en place (c'est-à-dire git) et que les équipes sont de petite à grande taille et que le développeur peut travailler sur plusieurs projets à la fois. Le problème majeur auquel nous sommes confrontés est qu'il existe une obligation contractuelle de prendre en charge les anciennes versions telles qu'elles existaient à l'époque, ce qui signifie que les nouveaux développements ne peuvent pas corriger l'ancien code (les produits Microsoft Office pourraient en être un exemple, vous n'obtenez que des correctifs pour l'année de référence que vous possédez).
Par conséquent, la version actuelle du produit est un peu compliquée car chaque produit principal a plusieurs dépendances, chacune avec ses propres versions qui peuvent changer entre les versions annuelles. De même, alors que chaque produit a son propre référentiel, la plupart du travail n'est pas effectué sur le tronc source principal, mais plutôt sur une branche pour la même année, la version du produit avec une nouvelle branche étant créée lorsque le produit est publié afin qu'il puisse être pris en charge. Cela signifie à son tour qu'obtenir la base de code d'un produit n'est pas une question simple comme on pourrait le penser lors de l'utilisation du contrôle de version.