GitFlow

Présentation

GitFlow est une stratégie de gestion de branches destinée à faciliter le développement collaboratif. Elle propose des étapes claires pour gérer les nouvelles fonctionnalités, les correctifs et les mises en production sans se marcher sur les pieds.

Installation

Avant de pouvoir utiliser GitFlow, vous pouvez installer l'extension git-flow (si vous ne souhaitez pas tout faire manuellement). Si vous souhaitez utiliser GitFlow sans cette extension, vous pouvez simplement reproduire son organisation de branches manuellement.

Voici les instructions pour installer git-flow en fonction de votre système d'exploitation :

macOS

Utilisez Homebrew pour installer git-flow :


                    brew install git-flow-avh
                

Linux

  • Debian/Ubuntu : Installez git-flow via APT :
    
                                sudo apt-get install git-flow
                            
  • Fedora : Installez git-flow via YUM :
    
                                sudo yum install gitflow
                            

Windows

Voici les étapes pour installer GitFlow sur un système Windows. Assurez-vous que Git est déjà installé sur votre machine.

  1. Téléchargez getopt.exe et les bibliothèques dont il dépend
    GitFlow utilise des scripts qui nécessitent getopt.exe pour traiter certaines options avancées en ligne de commande. Cet outil est indispensable pour exécuter les scripts internes de GitFlow sous Windows.
    En complément, deux bibliothèques sont nécessaires pour assurer son bon fonctionnement :
    • libintl3.dll : pour l'internationalisation des messages affichés par getopt.exe.
    • libiconv2.dll : pour gérer la conversion des textes entre différents encodages.
    Vous pouvez télécharger ces fichiers depuis un dépôt fiable, comme GitflowOnWindows. Placez getopt.exe, libintl3.dll, et libiconv2.dll dans le répertoire C:\Program Files\Git\bin.
  2. Clonez le dépôt GitFlow
    Ouvrez Git Bash à partir d'un dossier temporaire et exécutez la commande suivante pour récupérer les scripts nécessaires à l'installation. L'option --recursive dans la commande git clone est utilisée pour cloner un dépôt Git et tous les sous-modules qu'il contient. Les sous-modules sont des dépôts Git imbriqués à l'intérieur d'un autre dépôt, et ils sont souvent utilisés pour inclure des dépendances ou des composants externes nécessaires au projet.
    
                                git clone --recursive https://github.com/nvie/gitflow.git
                            
  3. Installez GitFlow
    Dans Git Bash, naviguez vers le dossier cloné et lancez le script d'installation.
    
                                cd gitflow/contrib
                                ./msysgit-install.cmd "C:\Program Files\Git"
                            
  4. Vérifiez l'installation
    Pour vérifier que GitFlow a été correctement installé, exécutez la commande suivante. Si l'installation a réussi, cette commande affichera la version de GitFlow.
    
                                git flow version
                            
  5. Vous pouvez effacer le dossier temporaire dans lequel vous aviez cloné les fichiers d'installation de GitFlow

Initialisation

Après installation, placez-vous dans votre dépôt local, puis lancez la commande :


                    git flow init
                

Lorsque vous initialisez GitFlow, deux branches principales sont créées par défaut :

  • main : la branche de production. Chaque commit sur cette branche correspond à une version stable et « officielle » de votre application, prête à être déployée.
  • develop : la branche d'intégration. C'est ici que convergent toutes les nouvelles fonctionnalités (features) avant d'être testées et préparées pour une prochaine version stable.

Git Flow configure également des préfixes de branches pour organiser les différentes phases de développement. Ces préfixes sont les suivants :

  • feature/ : utilisé pour le développement de nouvelles fonctionnalités. Chaque branche de fonctionnalité est créée à partir de develop et fusionnée dans develop une fois terminée.
  • bugFix/ : utilisé pour corriger des bugs identifiés dans des branches non critiques, comme develop ou une branche feature/.
  • release/ : utilisé pour finaliser une version. Les branches release/ permettent d'effectuer des tests, corriger les derniers bugs et préparer les fichiers nécessaires (comme le changelog) avant de fusionner dans main et develop.
  • hotfix/ : utilisé pour appliquer des corrections urgentes directement sur la branche main. Ces corrections sont fusionnées dans main et develop.
  • support/ : utilisé pour maintenir des versions spécifiques de l'application, par exemple pour des clients particuliers ou pour des projets nécessitant une maintenance à long terme.

Si vous ne souhaitez pas utiliser l'extension git-flow, vous pouvez configurer manuellement votre projet en vous assurant que la branche principale est nommée main, puis en créant une branche develop.


                    # Renommer la branche principale "master" en "main" (si nécessaire)
                    git branch -m master main

                    # Créer et basculer sur la branche "develop"
                    git checkout -b develop
                

Créer une nouvelle fonctionnalité (feature)

Lorsqu'une nouvelle fonctionnalité doit être développée, il est conseillé de partir de la branche develop. Si vous utilisez l'extension git-flow, la commande est :


                    git flow feature start ma-fonctionnalite
                

Manuellement, vous pouvez simplement créer une branche depuis develop :


                    git checkout develop
                    git checkout -b feature/ma-fonctionnalite
                

Travaillez ensuite librement sur votre fonctionnalité, commitez souvent et n'hésitez pas à repousser (push) votre branche pour la partager avec votre équipe.

Finaliser une fonctionnalité (feature)

Une fois votre fonctionnalité prête, vous pouvez la fusionner dans la branche develop :


                    git flow feature finish ma-fonctionnalite
                

Sans l'extension git-flow, vous feriez un merge classique :


                    git checkout develop
                    git merge feature/ma-fonctionnalite
                    git branch -d feature/ma-fonctionnalite
                

Votre branche feature/… est alors fermée, et develop intègre désormais la nouvelle fonctionnalité.

Créer une branche de release

Lorsque vous jugez que la branche develop contient suffisamment de fonctionnalités pour sortir une nouvelle version, vous pouvez créer une branche release :


                    git flow release start 1.0.0
                

Sans l'extension git-flow :


                    git checkout develop
                    git checkout -b release/1.0.0
                

On y effectue les derniers tests, corrections et mises à jour de version. Évitez d'y intégrer de nouvelles fonctionnalités pour préserver sa stabilité.

Finaliser une version (release)

Lorsque les tests sont validés, fusionnez la branche release/… vers main pour officialiser la mise en production :


                    git flow release finish 1.0.0
                

Manuellement :


                    git checkout main
                    git merge release/1.0.0
                    git tag -a 1.0.0 -m "Version 1.0.0"
                    git branch -d release/1.0.0
                

N'oubliez pas de reporter (fusionner) les modifications de la release vers develop si vous n'utilisez pas l'extension :


                    git checkout develop
                    git merge main
                

Le merge vers develop s'assure que les correctifs et ajustements réalisés en phase de release restent dans le cycle de développement.

Gérer les correctifs urgents (hotfix)

En cas de bug critique en production, vous pouvez créer une branche hotfix à partir de main :


                    git flow hotfix start bug-critique
                

Manuellement :


                    git checkout main
                    git checkout -b hotfix/bug-critique
                

Corrigez le bug, puis fusionnez la branche hotfix dans main pour déployer la correction et tagguez la version corrigée. Enfin, fusionnez également cette branche dans develop pour que la correction soit prise en compte dans la prochaine release.