Accueil Technologies Gitflow – Le workflow Git incontournable pour des projets de qualité
Gitflow - Le workflow Git dont vos projets ont besoins pour être de qualité

Gitflow – Le workflow Git incontournable pour des projets de qualité

par Jérémy PASTOURET
Publié : Mis à jour le

Git est devenu indispensable pour versionner vos projets de développement. Il est même utilisé à d’autres fins, comme versionner des textes de loi et en identifier les modifications. Si vous ne connaissez pas suffisamment Git, je vous invite à lire notre article dédié. Cependant plus un projet grossit, plus le nombre de développeurs croît. Une organisation autour du Git devient alors nécessaire pour avancer sereinement. Et c’est là qu’intervient Gitflow.

La problématique rencontrée avec Git

bannière modernes

La vie d’un projet est parfois compliquée. Il peut passer d’une petite taille sans aucun utilisateur, à une dimension plus conséquente avec de nombreux utilisateurs… et toutes leurs attentes. Lorsqu’on rencontre des difficultés à prioriser les tâches, on recrute de nouveaux développeurs pour gérer la charge. Le temps qu’ils soient formés et qu’ils développent correctement, des bugs plus ou moins urgents apparaissent. Et c’est généralement à ce moment là que les ennuis s’amplifient.

La gestion des versions d’un projet devient alors compliquée, car il faut en parallèle :

  • Développer de nouvelles fonctionnalités.
  • Corriger les bugs moins impactants pendant un sprint.
  • Corriger rapidement les bugs bloquants et les déployer.
  • Générer & mettre en production de nouvelles versions.

Pour mener à bien toutes ces tâches simultanément avec une équipe de développeurs, il faut donc établir un workflow strict et bien organisé.

Gitflow règle le problème avec son workflow Git

Bannière personnes

Gitflow est une extension Git développée par Vincent Driessen. Elle a fêté ses 10 ans en 2020, et est toujours utilisée dans de nombreuses entreprises.

Cette extension permet de gérer le versionnage du projet et pose un cadre. En effet, les développeurs qui travaillent sur un projet géré par Gitflow doivent suivre un workflow établi et éprouvé.

Dans le paragraphe suivant, vous découvrirez le mécanisme de Gitflow ainsi que le gain de temps qu’il vous apporte.

Pour utiliser Gitflow, vous devez l’installer sur votre système d’exploitation. Pour cela, rendez-vous sur le Wiki du repository GitHub.

Le fonctionnement du workflow de Gitflow

Initialisation de Gitflow

Gitflow initialisation - gitflow init

Le système de Gitflow est basé sur la capacité de Git à gérer des branches. Les branches élémentaires pour Gitflow sont la Master et la Develop.

La branche Master représente l’état du projet en production. Quant à la branche Develop, elle contient les fonctionnalités développées pendant une période donnée ou un sprint. Lorsque la phase de développement est terminée, le code présent dans la branche Develop est transféré sur la Master.

Vous pouvez initialiser votre projet avec Gitflow à tout moment. Cependant, si vous découvrez l’outil, je vous invite à créer un projet de test.

Pour démarrer l’initialisation, lancez la commande suivante dans un projet versionné :

git flow init

L’extension vous propose de préfixer les branches de Gitflow. Je vous conseille de laisser les valeurs par défaut et d’appuyer sur la touche entrée pour chaque proposition.

Initialized empty Git repository in ~/project/.git/
No branches exist yet. Base branches must be created now.
Branch name for production releases: [master]
Branch name for "next release" development: [develop]


How to name your supporting branch prefixes?
Feature branches? [feature/]
Release branches? [release/]
Hotfix branches? [hotfix/]
Support branches? [support/]
Version tag prefix? []

Pour vérifier que l’initialisation s’est bien déroulée, lancez la commande suivante :

$ git branch
* develop
 master

Vous pouvez constater l’apparition des branches essentielles de Gitflow.

Développement d’une fonctionnalité avec Gitflow

Gitflow nouvelle fonction - gitflow feature

Pour l’extension Git, démarrer une fonctionnalité (feature) sous-entend créer une branche spécifique. La raison est simple : si vous devez corriger un bug rapidement, vous pouvez changer de branche et retourner sur celle qui mérite une correction.

Vous pouvez aussi développer plusieurs fonctionnalités en parallèle, et c’est souvent le cas lorsqu’on travaille en équipe. Concrètement, pour démarrer une nouvelle fonctionnalité, vous devez lancer la commande suivante :

git flow feature start authentification

Il faut bien entendu remplacer le terme authentification par le nom de votre fonctionnalité. J’ai pris comme exemple la fonction d’authentification. Exécuter cette commande indique à l’extension qu’il faut revenir sur la branche Develop et créer une branche à partir de celle-ci (nommée authentification).

Voici la traduction Git de cette opération :

git checkout develop
git checkout -b feature/authentification

Ensuite, vous n’avez plus qu’à coder votre fonctionnalité. Lorsque vous avez fini, vous devez lancer la commande suivante :

git flow feature finish authentification

Gitflow retourne sur la branche develop et la fusionne avec la branche feature/authentification. Une fois la fusion réussie, la branche est supprimée. La traduction Git est la suivante :

git checkout develop
git merge feature/authentification
git branch -D feature/authentification

Créer une nouvelle version (release) avec Gitflow

Gitflow création d'une version - gitflow release

La suite évidente est donc la mise en production de votre sprint ou de votre période de travail sur la branche de développement (develop). Pour créer une nouvelle version (release), il vous suffit d’exécuter la commande suivante :

git flow release start 1.0.0

L’extension crée une release/nouvelle version. Pour cela, elle se place sur la branche develop et crée une nouvelle branche nommée release/1.0.0.

A ce moment, vous pouvez séparer l’équipe de développement en deux. Une partie vérifie et teste le code, l’autre commence le développement d’un nouveau sprint sur la branche develop.

En cas d’erreur sur la branche release, vous pouvez apporter directement une correction.

Après avoir effectué les tests et que vous êtes à mettre en production, vous devez lancer la commande suivante :

git flow release finish 1.0.0

L’extension revient sur la branche master et fusionne le contenu de la branche release/1.0.0.

Voici la traduction Git :

git checkout master 
git merge release/1.0.0

Un tag local est aussi créé pour marquer la version dans Git. Pour envoyer le tag sur votre serveur de version, lancez la commande suivante :

git push origin --tags

C’est très pratique pour retourner dans une version antérieure. Je ne vous le souhaite pas mais si une nouvelle version plante tout votre système, vous pouvez retourner en arrière et installer une précédente version de cette manière.

Attention : il m’est déjà arrivé que la création de tag ne fonctionne pas correctement avec Gitflow. Je vous invite donc à vérifier sa présence à chaque fin de release.

Correction de bug urgent en production

Gitflow correction de bug - gitflow hotfix

Étape finale du workflow de Gitflow : la gestion d’erreur bloquante en production. Dans ce cas, inutile de paniquer : il faut créer un hotfix. Pour cela, il suffit de lancer la commande suivante :

git flow hotfix start change_api_url

Cette commande crée une nouvelle branche à partir de la Master. En terme Git, voici ce que cela signifie :

git checkout master
git checkout -b hotfix/change_api_url

Puis lorsque vous avez terminé votre hotfix et que vous êtes prêt à le livrer, il vous suffit de lancer cette commande :

git flow hotfix finish change_api_url

C’est l’une des opérations les plus compliqués de Gitflow. En effet, votre correction est transmise sur la branche Master et sur la branche Develop. En d’autres termes, Git effectue ces commandes :

git checkout master
git merge hotfix/change_api_url
git checkout develop
git merge hotfix/change_api_url
git branch -D hotfix/change_api_url

Précisions sur la gestion des branches avec Gitflow

Gitflow commands disponible
Source : https://danielkummer.github.io/git-flow-cheatsheet/

Il y a deux autres sous-fonctions très utiles avec Gitflow. Lorsque vous créez des hotfixes, releases, features, vous obtenez des branches locales (sur votre ordinateur). Si vous souhaitez que d’autres développeurs puissent travailler dessus (très pratique pour les releases), vous devez utiliser le mot clé Publish.

Par exemple :

git flow release publish 1.0.0

Gitflow va pousser cette branche sur votre serveur de gestion de version. Si un autre développeur souhaite travailler dessus avec vous, il lui suffit de lancer la commande suivante :

git flow release pull origin 1.0.0

Gitflow n’est pas adapté à tous les projets

Bannière problème

Comme indiqué plus haut, Gitflow s’avère très utile à partir d’un certain stade. Bien évidemment, rien ne vous empêche de l’utiliser dès le début d’un projet. Cependant, il existe un type de projet avec lequel Gitflow est incompatible.

En effet, Gitflow gère une seule version du produit. En d’autres termes, imaginez que vous ayez des versions différentes en fonction de vos clients.

  • Une version personnalisée pour le client A (v1.2a).
  • Une version commune à tous (v3).
  • Un client B qui attend 1 an avant d’avoir la mise à jour (v2).

Si vous utilisez Gitflow dans ce contexte, vous risquez de rencontrer de nombreux problèmes. Par exemple : comment corriger un bug uniquement sur la v1.2a ?

En conclusion, Gitflow peut être utilisé tant que vous n’avez pas de versions différentes selon les clients.

Conclusion

Bannière conclusion

Désormais, vous pouvez appliquer Gitflow à vos projets. Corrigez des bugs à la volée sans prise de tête, passez de fonctionnalité en fonctionnalité et travaillez en équipe plus simplement.

💬 Comment faites-vous pour gérer le développement de nouvelles fonctionnalités, la mise en production… ? Dites-le nous en commentaire.

Et pour aller plus loin avec Git, je vous invite à lire notre article sur les conventionnals commits.

Laisser un commentaire

Ce site utilise Akismet pour réduire les indésirables. En savoir plus sur comment les données de vos commentaires sont utilisées.