Série Git - Les workflows git (5/5)
Quelle méthode pour collaborer avec Git ?
Nous entamons le dernier article de cette série sur Git. Nous avons précédemment décrit la manière dont fonctionnait Git et comment l’utiliser, les plateformes collaboratives et nous allons maintenant terminer sur la présentation de deux méthodes de collaboration sur le développement.
Nous allons ainsi présenter deux workflows très connus, Github flow et Gitflow, avec leurs avantages et inconvénients qu’il me semble important de connaitre.
1 Github flow
Le premier que nous allons explorer est Github flow.
Ce workflow propose une branche principale (master ou bien main la plupart du temps) à partir de laquelle seront créées et fusionnées les branches (hotfix et feature par exemple).
Voici un exemple de graphe présentant une branche principale (main) suivi de la création de deux branches feature(feature/1_toto et feature/2_tata) et d’une branche hotfix(hotfix/3_tutu) :
L’avantage de ce workflow est qu’il est simple à mettre en œuvre, il est facilement compréhensible et limite les conflits lors de fusion de branches.
L’inconvénient est qu’il ne permet pas de dissocier les hotfix et les feature lors de la création des tags sur la branche principale.
Ce workflow s’adresse principalement sur les projets dont le cycle de vie du produit est simple et pour les équipes peu nombreuses.
2 Git flow
Le deuxième workflow est Git flow.
À l’inverse du premier, celui-ci dispose de deux branches principales (develop et master généralement).
Les branches feature sont créées et fusionnées à partir de la branche develop.
Afin d’intégrer les différentes modifications apportées à la branche develop dans la branche master, il faut ensuite passer par une branche de release (exemple release/1.1.0 pour la release de la version 1.1.0).
Les branches hotfix sont, quant à elles, créées et fusionnées directement sur la branche master puis répercutées sur la branche develop.
L’avantage de ce workflow est qu’il correspond bien au cycle de développement d’un produit avec :
- Les branches
feature/*permettant aux développeurs d’isoler leurs modifications ; - La branche
developpermettant de mettre en commun les développements de l’ensemble de l’équipe sans impacter la branche master ; - Les branches
release/*pour effectuer une recette (et éventuellement quelques correctifs) avant le passage en production ; - La branche
masterqui permet une mise en production à partir de laquelle seront taguées les versions ; - Les branches
hotfix/*permettant aux développeurs d’isoler leurs modifications dans le cadre d’un correctif en production.
L’inconvénient est qu’il est plus lourd à mettre en place et nécessite un apprentissage pour les développeurs.
Ce workflow s’adresse donc plutôt à des produits dont on veut permettre une distinction forte entre les branches de feature et celles de hotfix ; dont on veut permettre des recettes complètes et potentiellement un peu plus longues (via les branches release/*) et dont les équipes sont un peu plus importantes avec une bonne connaissance de Git.