J'ai récemment remarqué quelque chose qui regarde certains projets populaires sur GitHub, à savoir qu'il n'y a pas de develop
branche. Et en fait, le guide GitHub Flow ne le mentionne pas non plus. De ma compréhension, master
devrait toujours être totalement stable et refléter la production. Si les développeurs travaillent sur des branches de fonctionnalités, et les fusionnent ensuite master
, cela signifie qu'il y a une période de temps pendant laquelle les fonctionnalités / correctifs sont fusionnés master
et que la master
branche est en réalité plus récente que la production.
Ne serait-il pas plus logique de demander à l’équipe de créer des branches de fonctionnalités / corrections develop
, de les fusionner à nouveau, puis de develop
fusionner master
et de créer une balise lorsque la version suivante est totalement prête à être commercialisée ? Imaginez que des personnes fusionnent directement master
et qu’un bogue signalé en production devienne difficile à corriger car la master
base de code de la branche a considérablement changé. Ensuite, les développeurs doivent simplement dire à l'utilisateur d'attendre la prochaine version pour voir le problème résolu.
EDIT: Cette question est différente de celle de "créer ou non une branche". Il s’adresse spécifiquement aux personnes qui abandonnent l’utilisation de la branche develop et aux raisons qui l’entourent, car cela a longtemps été présenté comme la meilleure pratique.
Réponses:
Il provient de la CI mentalité où il y a intégration plusieurs fois par jour.
Il y a des avantages et des inconvénients des deux.
Au sein de notre équipe, nous avons également abandonné la branche de développement, car nous estimions qu’elle n’apportait aucun avantage supplémentaire, mais quelques inconvénients. Nous avons configuré notre logiciel CI (Teamcity) pour compenser les inconvénients:
Cela fonctionne parce que toutes les demandes d'extraction contiennent du code potentiellement libérable, mais cela ne signifie pas que nous déployons tous les commits en maître.
La raison principale pour laquelle nous avons abandonné la branche développement est qu’elle avait tendance à devenir trop volumineuse et trop longue à voir ce qu’elle contenait. Si nous avons déployé quelque chose un peu prématurément, nous nous contentons de dériver une branche de correctif et de le déployer directement.
la source
master
afin que, si un bogue survient plus tard alors que vous êtesmaster
dans un état de flux, vous pouvez facilement détacher un correctif à partir de la balise 1.3?Une branche de développement est plus importante si votre processus de publication est complexe et que vous devez avoir de sérieux candidats à la publication.
Par exemple, imaginez que vous écrivez un logiciel qui est un micrologiciel sur une voiture. Ceci est ... non trivial à corriger et il est probable que toute version aurait un ensemble complet de tests non-CI / d'intégration exécutés sur du matériel réel.
Dans ce cas, il peut être plus logique d'isoler un "candidat à la libération" dans une branche non principale (telle que "develop"). Cela permet à votre équipe exécutant ces tests d’avoir une branche dans laquelle fusionner des fonctionnalités.
Les applications Web ou autres logiciels facilement mis à jour n'ont pas cette contrainte.
Cependant, notez que:
la source
J'ai vu deux philosophies dans les projets, et je pense que le choix est une question de goût:
Désignez «maître» comme version de production et développez-le dans une branche «développement».
Développez en «maître» et créez une branche portant des noms différents pour les versions de production stables. Cela est d'autant plus logique si votre projet comporte plusieurs branches de version à la fois (par exemple, la version actuelle préférée est la version 1.8, mais vous conservez également la version 1.7).
Les deux sont des approches communes, et ont leurs avantages et leurs inconvénients.
la source
Les sorties en production peuvent être étiquetées, de sorte que la situation qui a été publiée peut toujours être reproduite sans consacrer une branche entière à cette fin.
Si un bogue critique est détecté dans la production à un moment où le maître ne peut pas être publié, il est assez facile d'extraire le tag et de démarrer une nouvelle branche "correctif pour la version 1.2.0" à partir de là. Mais cela devrait être plutôt rare.
La plupart du temps, dans nos applications Web, master a changé depuis la dernière version, mais pas de manière très significative. Nous pouvons donc simplement créer une nouvelle version de master intégrant le correctif. De toute façon, cela aide de faire des communiqués très fréquents.
la source
Ce n'est pas Github Flow.
Voici le processus de déploiement / fusion de Github Flow, en fonction de votre lien:
(Mon accentuation)
En d'autres termes,
master
ne sera jamais en avance sur la production. De même,master
sera toujours dans un état stable et libérable (mis à part les bogues non découverts), puisque tout est examiné, testé et mis en production avant d’ être fusionnémaster
.la source
master
votre position de retour en arrière est toujours active en cas de défaillance de la branche de fonctionnalité que vous mettez en production. Si ce n'est pas le cas, il est fusionnémaster
et devient la nouvelle solution de rechange. Je l'aime.Le problème que je vois est que le déploiement / fusion de flux Git / Hub suppose qu'une fonctionnalité est en cours de développement / testée / fusionnée / déployée à la fois - et selon mon expérience, ce n'est pas le cas. Si nous fusionnions une fonctionnalité à la fois, les risques de problèmes de régression sont plus grands. Ils ne sont détectés qu'une fois les fonctionnalités fusionnées en tant que maître et éventuellement en production.
Il doit y avoir un moyen de tester plusieurs fonctionnalités, de fusionner plusieurs fonctionnalités et de déployer les mêmes. J'utilise une "branche" (une branche créée à partir d'un maître avec des branches de fonctions de test prêtes à être fusionnées) qui est déployée sur qa / uat. Les corrections survenues pendant la durée de validité se produisent uniquement dans la branche de fonctionnalité et celles-ci sont fusionnées à nouveau avec la branche. Une fois qu'une sous-branche de la branche est approuvée, seules les fonctionnalités approuvées de l'ensemble sont demandées à maîtriser - et le cycle est continu.
J'utilise ceci avec Gitflow, mais je songe à l'utiliser pour le flux GitHub. Les nombreuses fonctionnalités QA / UAT à un moment donné paraissent importantes. Un autre problème avec le flux GitHub est qu’il suppose que tous les développeurs sont sûrs, et ce n’est pas toujours le cas.
Je préférerais utiliser le flux GitHub en raison de sa simplicité. Avec un paquet comme fonctionnalité, je pense que ce serait mieux prêt. Il est possible que le paquet ressemble à la publication. Cependant, je réfléchis encore à cela.
Un autre problème est que le processus de demande d'extraction se produit à la fin avant la fusion avec le maître; Cependant, vous souhaitez parfois revoir le code avant le test de qualité de service - donc bien avant la fusion.
la source