Nous envisageons de passer d'un SVN à un VCS distribué sur mon lieu de travail. Je connais toutes les raisons de vouloir utiliser un DVCS pour le développement au jour le jour: contrôle de version locale, branchement et fusion plus facile, etc., mais je n'ai pas vu beaucoup de choses qui soient convaincantes. de la gestion des versions logicielles. Voici notre processus de publication:Gestion des versions avec un système de contrôle de version distribué
- Découvrez les modifications disponibles pour la fusion.
- Exécutez une requête pour rechercher les défauts/tickets associés à ces modifications.
- Filtrez les modifications associées aux tickets "ouverts". Dans notre environnement, les tickets doivent être fermés pour pouvoir être fusionnés avec une branche de publication.
- Filtrez les modifications que nous ne voulons pas dans la branche de publication. Nous sommes très conservateurs lorsqu'il s'agit de fusionner des changements. Si un changement n'est pas absolument nécessaire, il ne sera pas fusionné.
- Fusionner les modifications disponibles, de préférence dans l'ordre chronologique. Nous regroupons les modifications si elles sont associées au même ticket.
- Bloquer les modifications indésirables de la branche de publication (
svnmerge block
) afin que nous n'ayons plus à les traiter.
Parfois, nous pouvons jongler 3-5 étapes différentes à la fois. Certains jalons ont des contraintes très différentes et la liste de blocage peut être assez longue. J'ai eu des problèmes avec le git, le mercurial et le plastique, et pour autant que je sache, aucun d'eux n'aborde très bien ce modèle. Il semblerait qu'ils fonctionneraient très bien quand vous avez un seul produit que vous libérez, mais je ne peux pas imaginer les utiliser pour jongler avec des produits très différents provenant du même code.
Par exemple, la cueillette des cerises semble être une réflexion après coup dans mercurial. (Vous devez utiliser l'extension 'transplant', qui est désactivée par défaut). Après avoir sélectionné un changement dans une branche, il apparaît toujours comme une intégration disponible. La cueillette des cerises brise la façon mercurielle de travailler.
DVCS semble mieux convenir aux branches d'entités. Vous n'avez pas besoin de sélectionner des cerises si vous fusionnez directement à partir d'une branche de fonctionnalité vers le tronc et la branche de publication. Mais qui veut faire tout ce qui fusionne tout le temps? Et comment demandez-vous pour ce qui est disponible pour fusionner? Et comment vous assurez-vous que tous les changements dans une branche de fonctionnalité appartiennent ensemble? Cela ressemble à un chaos total. Je suis déchiré parce que le codeur en moi veut DVCS pour le travail de tous les jours. Je le veux vraiment. Mais je crains le jour où je dois mettre le chapeau de directeur de la libération et trier ce qui doit être fusionné et ce qui ne fonctionne pas. Je veux écrire du code, je ne veux pas être un singe de fusion.
> Placez simplement chaque version dans une branche. Au lieu de bloquer les changements que vous ne voulez pas, n'acceptez que ceux que vous faites, en ne signant que pour les versions qui vont dans une version. J'ai déjà lu ceci mais je n'arrive pas à comprendre comment nous pourrions l'appliquer. Dans notre flux de travail, lorsqu'un changement est survenu dans le coffre, c'est un «bon» changement. Il a déjà été signé. Ce que nous fusionnons/bloquons sont des changements appropriés/inappropriés par rapport à des branches de publication spécifiques. Par exemple, la modification de XYZ est souhaitable pour le produit A, mais indésirable pour le produit B. –