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.
Réponses:
La quantité (et le type) de structure dont vous avez besoin dépend beaucoup de ce que vous voulez pouvoir faire. Découvrez ce dont vous ne pouvez pas vous passer, ce que vous voulez avoir et ce qui vous importe peu.
Un bon exemple d'ensemble de décisions pourrait être:
Des choses dont nous ne pouvons pas nous passer:
Ce que nous aimerions avoir:
Des choses sans lesquelles nous pouvons vivre:
Si ce qui précède était vos objectifs, vous pourriez alors adopter un processus comme celui-ci:
Ce processus ne répondra pas à toutes vos questions - en particulier, vous aurez besoin d'un processus en place pour décider quels correctifs peuvent être apportés à une branche de publication et pour vous assurer que les bogues ne sont pas corrigés en premier sur une branche de publication (ces correctifs doit toujours être testé sur le tronc si possible). Mais cela vous donnera un cadre dans lequel prendre de telles décisions.
la source
"Long terme" indique que vous avez besoin de versioning, mais il n'implique aucune stratégie de versioning et de branchement spécifique. La question la plus intéressante est le nombre de lignes de produits ou de lignes de versions principales que vous souhaitez prendre en charge (cela dépend du contrat avec vos clients). Vous aurez au moins besoin d'une succursale pour chaque ligne de produits / version principale pour laquelle vous avez un contrat de maintenance.
En revanche, cela dépend de la taille de votre équipe. Si vous avez une grande équipe de développement, avec différentes personnes travaillant sur différentes fonctionnalités en parallèle, vous aurez évidemment besoin de plus de branches de fonctionnalités que si vous avez une équipe d'une ou deux personnes. Si vous travaillez avec une équipe plus importante, vous devriez envisager d'utiliser le contrôle de version distribué, ce qui rend le travail parallèle sur différentes branches (et les réintégrer plus tard dans le tronc) beaucoup plus efficace.
la source
Git est un outil de contrôle de version - il gère les versions des fichiers. Ce que vous recherchez est un outil de gestion de configuration. Il y en a plein de disponibles, mais surtout à des prix élevés de la part d'IBM.
Les outils de contrôle de version fournissent des branchements et des balises, ce qui permet une gestion de configuration grossière sans prise en charge d'outils supplémentaires, les développeurs de menay ne comprennent donc pas la différence. Vos besoins vont probablement au-delà de ce que GIT est conçu pour faire.
Je ne connais pas, mais je suis certain qu'il existera, un ajout d'outil CM pour Git.
la source
Cette question semble être très similaire à une autre question à laquelle j'ai répondu récemment.
En bref, cela ressemble plus à un problème de conception et de distribution de produits qu'à un problème de contrôle de version / de branchement. Bien sûr, il est facile pour moi de dire cela et plus difficile à résoudre si vous êtes déjà au fond du problème.
Sans connaître plus en détail les spécificités de votre problème particulier. En général cependant, si j'avais plusieurs versions de produits basées sur une base de code qui avait une grande quantité de code partagé entre les produits, si c'était faisable, je chercherais à refactoriser les produits d'une manière qui les rendrait plus modulaires, et à assurez-vous que les modules eux-mêmes ne nécessitent pas de branchement de code supplémentaire. Je regarderais également mon modèle de déploiement pour voir s'il y avait un meilleur moyen de soutenir mes clients tout en conservant une grande partie de la base de code unifiée. Lorsqu'une personnalisation spécifique du client est requise, une plus grande granularité des modules peut être nécessaire pour réduire la quantité de code dupliqué dans le système.
Ce n'est pas une tâche facile, mais réparable par étapes si vous gérez bien le travail et si vous pouvez planifier le travail de sorte que vous n'ayez pas besoin de «tout mettre à niveau» tout à la fois.
la source