Nous avons une équipe de développeurs de 4 personnes et nous avons récemment déménagé à Git. Nous voulons connaître les meilleures pratiques concernant le flux de travail avec branchement et fusion.
Nous utilisons une version allégée de Git Flow. Nous avons une branche dev, staging et master qui sont toutes linéaires entre elles.
En plus de cela, nous utilisons des branches de fonctionnalités et de correctifs pour travailler sur de nouvelles fonctionnalités et corriger des bugs.
J'ai les questions suivantes:
Je pense que nous devrions passer du master et fusionner la branche de fonctionnalité, car il pourrait y avoir quelque chose dans le développement que nous ne voudrions pas fusionner avec le staging et le master.
Quel est ton opinion? Quelles sont les meilleures pratiques?
Nous nous sommes installés sur un workflow appelé Git Flow , mais au lieu de ramifier les fonctionnalités de dev, nous les branchons à partir de la version actuelle. Cela nous permet de travailler sur des problèmes distincts à différentes vitesses. S'ils réussissent en QA, ils entrent dans la version.
Concernant les succursales et le déploiement:
Le workflow est le suivant:
ISSUE_NUMBER
.Une fois que la version a été déployée pour vivre et qu'un bogue critique est découvert, nous branchons une branche de correctif à partir du maître (par exemple, hotfix/ISSUE_NUMBER
), fusionnez-le à nouveau dans le maître et déployez à nouveau.
Cela dépend toujours de la façon dont vous voulez travailler et de l'accord d'équipe. Cela dit.
Dans la page Atlassian vous avez une très belle explication de ce workflow
L'idée avec ce type de workflows est d'avoir une branche de version stable dans laquelle vous pouvez travailler et corriger tout bug immédiatement si vous en avez besoin avec suffisamment de confiance pour qu'il soit toujours stable et qu'aucune nouvelle fonctionnalité ou refactorisation ne se glisse sans s'en rendre compte.
Aussi pour avoir l'isolement et la liberté pour chaque nouvelle fonctionnalité qui sera développée dans sa propre branche sans aucun bruit provenant d'autres fonctionnalités. Enfin, vous fusionnerez vos fonctionnalités dans votre branche de développement et de là dans la branche principale pour la prochaine version.
La seule chose que je recommanderais pour vous est d'apprendre à rebaser vos branches de fonctionnalités au-dessus de la branche de développement chaque fois qu'une autre fonctionnalité est fusionnée en dev pour éviter de résoudre les conflits au moment de la fusion, mais isolément sur la branche de fonctionnalité où vous savez quoi vos changements le sont.
Bien que Git Flow soit un excellent modèle de branchement, les questions que vous posez sont le symptôme d'un problème plus important: Git Flow est trop lourd pour une petite équipe travaillant sur un produit Web grand public (je fais l'hypothèse que vous travaillez sur le Web grand public produit, n'hésitez pas à ignorer si vous codez la salle de contrôle de la centrale nucléaire).
Je vous encourage à envisager le déploiement continu (CD) avec un modèle de branchement extrêmement simple:
Il est très facile d'installer un CD de nos jours:
master
pour chaque nouvelle fonctionnalité.master
et regardez-la en ligne.Il y a beaucoup d'objections communes à cela, que tout peut être résumé comme "mais que faire si j'introduis un bug?!". La réponse est "Vous allez le réparer!". Si vous écrivez des tests, si vous surveillez votre site de production, si vous effectuez des révisions de code, si vous pratiquez la programmation par paires, si vous utilisez des indicateurs de fonctionnalité et si vous gardez vos fonctionnalités de petite taille, les avantages que vous obtenez du CD l'emportent sur les problèmes occasionnels n'importe quel jour.
Je vous encourage à essayer. Cela vous permettra de vous concentrer sur ce qui compte vraiment: créer un excellent produit! Si vous ne me croyez pas, jetez un œil à ceci excellente présentation de Github .