Dans un projet Web développé en continu (pas un produit), nous avons actuellement la stratégie de branchement suivante, basée en gros sur Git Flow :
- développer la branche: dernière version de travail
- branche principale: version à publier / version publiée
- branches de fonctionnalités: fonctionnalités en développement
- branches de correctifs: corrections de bogues urgentes dans la version publiée
Master est en lecture seule, mis à jour via les demandes d'extraction des branches de développement ou de correctif . Chaque mise à jour entraîne la création et le déploiement d'une version candidate sur le système intermédiaire. Les candidats aux versions sont déployés en production après approbation manuelle.
Les branches de fonctionnalités sont créées en fonction du développement ou de la dernière validation qui a été fusionnée dans master. Une demande d'extraction d'une branche de fonctionnalité à développer est créée, déployée sur un système de test gratuit où les tests d'intégration et les tests d'acceptation (automatiques et manuels) sont exécutés. Lorsqu'il est testé et révisé avec succès, le PR est fusionné, de sorte qu'il fera partie de la prochaine version (c'est-à-dire qu'il fusionnera du développement au master).
Mon but
Je voudrais simplifier cela et me débarrasser de la branche develop. La branche develop a principalement des raisons historiques et comme c'est toujours une version testée avec succès, je pense qu'il n'est pas nécessaire de la séparer de master. La supprimer simplifiera également le processus de publication car il n'y a plus de fusion supplémentaire.
J'ai les contraintes suivantes:
- les sorties sont programmées et ne devraient pas être entièrement automatisées
- Bien que les branches de fonctionnalités soient généralement de courte durée, certaines restent non fusionnées pendant plusieurs semaines (par exemple une refonte) mais doivent également être testées (actuellement sous forme de demandes de tirage ouvertes à développer)
- parfois, une seule fonctionnalité doit être publiée en dehors de la version régulière, ce qui en fait un correctif. Avec la stratégie actuelle, je peux rebaser une branche de fonctionnalité et la fusionner directement dans le maître
- il arrive également que nous devions retenir les fonctionnalités après l'échec des tests d'acceptation avec des systèmes externes sur la mise en scène
Où je ne suis pas sûr de la transition:
- actuellement, je crée des demandes d'extraction pour les tests et les commits de fusion pour les versions. Puis-je unifier cela?
- comment gérer les correctifs lorsque le maître est en avance sur la dernière version. Dois-je créer et déployer des versions directement à partir de branches de correctifs?
- Existe-t-il un moyen judicieux de gérer les fonctionnalités qui devraient être exclues d'une version après avoir été fusionnées? Une branche de développement distincte est-elle vraiment un avantage pour ces cas? La plupart du temps, je reviens et reviens à la fin manuellement.