Aller au contenu

git flow

Git flow est un modèle de gestion de branches. Il permet de gérer les branches d'un projet de manière structurée.

Pour aller plus loin, vous pouvez consulter les sites suivant:

En résumé, il est composé de deux branches principales :

  • main : branche principale du projet. Elle contient le code de production,
  • develop : branche de développement. Elle contient le code en cours de développement.

et de branches secondaires :

  • feature/* : branches de fonctionnalité. Elles contiennent le code d'une fonctionnalité en cours de développement,
  • release/* : branches de release. Elles contiennent le code en cours de préparation pour une release,
  • hotfix/* : branches de hotfix. Elles contiennent le code en cours de développement pour corriger un bug en production.
  • bugfix/* : branches de bugfix. Elles contiennent le code en cours de développement pour corriger un bug en cours de développement.

feature

Le schéma ci-dessous illustre la partie feature du git flow. Les développements se font sur la branche develop ou via des branches feature créées à partir de la branche develop pour développer des fonctionnalités. Une fois les fonctionnalités développées, les branches feature sont fusionnées avec la branche develop. On peut choisir d'autoriser le travail directement sur la branche develop sans passer par des branches feature ou bien l'interdire. Selon la taille du projet, il peut être préférable d'interdire le travail directement sur la branche develop pour éviter les conflits.

Il existe des solutions pour protéger les branches develop et main et empêcher les modifications directes sur ces branches (nous verrons comment protéger les branches sur github dans un prochain chapitre).


gitGraph
   commit
   commit
   branch develop
   commit
   branch feature1
    commit
    commit
    checkout develop
    commit
    merge feature1
    branch feature2
    commit
    commit
    commit
    checkout develop
    commit
    branch feature3
    commit
    checkout develop
    branch feature4
    commit
    commit
    checkout develop
    merge feature2

Dans le flow présenté ci-dessus, la feature1 a été initialiser à partir de la brance develop, 2 commits ont eu lieu sur la branche feature1 puis la branche feature1 a été fusionnée avec la branche develop.

La feature2 a été initialiser à partir de la brance develop, 3 commits ont eu lieu sur la branche feature2 puis la branche feature2 a été fusionnée avec la branche develop.

La feature3 a été initialiser à partir de la brance develop, 1 commit a eu lieu sur la branche feature3.

La feature4 a été initialiser à partir de la brance develop, 2 commits ont eu lieu sur la branche feature4.

Les branches feature3 et feature4 sont en cours de développement. Elles n'ont pas encore été fusionnées avec la branche develop. Elles peuvent encore être modifiées, voir supprimées si elles ne sont pas validées.

release

Le schéma ci-dessous illustre la partie release du git flow. La release est une version du projet qui est prête à être mise en production.

Une release est une version du projet qui est testée et qui est stable. On lui attribue un numéro de version. Par exemple, la version 1.0.0. (nous verrons comment gérer les versions dans un prochain chapitre). Les releases se font via des branches release créées à partir de la branche develop pour préparer une release.

La release est une branche de préparation. Elle permet aussi de tester le code avant de le mettre en production. Si un bug est détecté, il est possible de corriger le bug sur la branche release et de fusionner la branche release avec la branche develop.

Une fois la release prête, la branche release est fusionnée avec la branche develop et la branche main.


gitGraph
   commit
   commit
   branch develop
   commit
   branch release1
    commit
    commit
    commit
    checkout develop
    commit
    merge release1
    checkout main
    merge release1
    checkout develop
    commit

hotfix

Les hotfix se font via des branches hotfix créées à partir de la branche main pour corriger un bug en production. Une fois le hotfix développé, la branche hotfix est fusionnée avec la branche develop et la branche main.

Le hotfix est une branche de correction. La modification doit être ciblée et la durée de vie de la branche doit être courte. Le hotfix est une branche temporaire qui doit être supprimée une fois la correction appliquée. Elle doit être fusionnée avec la branche develop et la branche main le plus rapidement possible.


gitGraph
   commit
   commit
   branch develop
   commit
   checkout main
   branch hotfix1
    commit
    commit
    checkout main
    merge hotfix1
    checkout develop
    commit
    merge hotfix1

bugfix

Les bugfix se font via des branches bugfix créées à partir de la branche develop pour corriger un bug en cours de développement. Une fois le bugfix développé, la branche bugfix est fusionnée avec la branche develop. Il s'agit du même principe que le hotfix mais pour corriger un bug en cours de développement.

Résumé

Le schéma Git flow complet illustre le git flow complet. Les développements se font sur la branches develop ou via des branches feature créées à partir de la branche develop pour développer des fonctionnalités. Une fois les fonctionnalités développées, les branches feature sont fusionnées avec la branche develop.

Les releases se font via des branches release créées à partir de la branche develop pour préparer une release. Une fois la release prête, la branche release est fusionnée avec la branche develop et la branche main.

Les hotfix se font via des branches hotfix créées à partir de la branche main pour corriger un bug en production. Une fois le hotfix développé, la branche hotfix est fusionnée avec la branche develop et la branche main.