Workflow Git#
Ce document décrit le workflow Git utilisé dans le projet DataLab, basé sur une branche main, une branche develop et des branches spécifiques aux fonctionnalités. Il définit également comment les correctifs de bogues sont gérés.
Note
Ce workflow est une version simplifiée du Gitflow Workflow. Il a été adapté pour répondre aux besoins du projet DataLab à l’étape actuelle de développement. À l’avenir, nous pourrions envisager d’adopter un workflow plus complexe, par exemple en ajoutant des branches de publication.
Modèle de branches#
Branches principales#
main: Représente la version stable et prête pour la production du projet.develop: Utilisé pour le développement continu et l’intégration de nouvelles fonctionnalités.
Branches de fonctionnalités#
feature/feature_name: Utilisé pour le développement de nouvelles fonctionnalités.Créé à partir de
develop.Fusionné de nouveau dans
developune fois terminé.Supprimé après la fusion.
Branche de maintenance#
release: Représente la ligne de maintenance actuelle pour les versions correctives.Créé à partir de
mainaprès une version stable lorsque le premier correctif est nécessaire.Accepte les fusions des branches
fix/xxxethotfix/xxx.Fusionné de nouveau dans
mainpour chaque tag de version corrective (par exemple, 1.0.1, 1.0.2).Réinitialisé ou recréé lors du démarrage d’un nouveau cycle de version mineure/majeure.
Note
La branche release n’est pas versionnée (pas de release/1.0.x). Elle représente toujours « la ligne de maintenance actuelle ». Lorsqu’une nouvelle version mineure est publiée (par exemple, 1.2.0), l’ancienne branche release est supprimée et une nouvelle est créée à partir du nouveau tag lorsque le premier correctif pour 1.2.1 est nécessaire.
Branches de correction d’anomalies#
fix/xxx: Utilisé pour les corrections générales d’anomalies qui ne sont pas urgentes.Créé à partir de
develop(pour la prochaine version de fonctionnalité) ourelease(pour la version corrective).Fusionné de nouveau dans la branche d’origine une fois terminé.
Supprimé après la fusion.
hotfix/xxx: Utilisé pour les corrections urgentes critiques pour la production.Créé à partir de
release(si elle existe) oumain(si aucune branchereleasen’existe encore).Fusionné de nouveau dans
releaseoumain.La correction est ensuite sélectionnée dans
develop.Supprimé après la fusion.
Note
Les correctifs urgents (correctifs de haute priorité) seront intégrés dans la prochaine version de maintenance (X.Y.Z -> Z+1), tandis que les correctifs (correctifs de basse priorité) seront intégrés dans la prochaine version de fonctionnalité (X.Y -> Y+1).
Branches de documentation#
Lors de la rédaction de documentation qui n’est pas liée au code source (par exemple, les supports de formation, les guides utilisateur), les branches doivent être nommées en utilisant le préfixe doc/.
Exemples :
doc/training-materialsdoc/user-guide
Cette convention de nommage améliore la clarté en séparant clairement les efforts de documentation du développement lié au code (fonctionnalités, corrections, etc.).
Workflow pour les nouvelles fonctionnalités#
Créer une nouvelle branche de fonctionnalité à partir de
develop:git checkout develop git checkout -b develop/feature_name
Développer la fonctionnalité et valider les modifications.
Fusionner la branche de fonctionnalité de nouveau dans
develop:git checkout develop git merge --no-ff develop/feature_name
Supprimer la branche de fonctionnalité :
git branch -d develop/feature_name
Avertissement
Ne pas laisser les branches de fonctionnalités non fusionnées trop longtemps. Les réorganiser régulièrement sur develop pour minimiser les conflits.
Workflow pour les corrections d’anomalies régulières#
Pour la prochaine version de fonctionnalité (cible : develop) :
Créer une branche de correction d’anomalie à partir de
develop:git checkout develop git checkout -b fix/bug_description
Appliquer la correction et valider les modifications.
Fusionner la branche de correction de nouveau dans
develop:git checkout develop git merge --no-ff fix/bug_description
Supprimer la branche de correction :
git branch -d fix/bug_description
Pour la version de maintenance actuelle (cible : release) :
Créer une branche de correction d’anomalie à partir de
release:git checkout release git checkout -b fix/bug_description
Appliquer la correction et valider les modifications.
Fusionner la branche de correction de nouveau dans
release:git checkout release git merge --no-ff fix/bug_description
Supprimer la branche de correction :
git branch -d fix/bug_description
Avertissement
Ne pas créer une branche fix/xxx à partir d’une branche develop/feature_name. Toujours créer une branche à partir de develop ou release pour garantir que les corrections sont correctement propagées.
# Incorrect:
git checkout develop/feature_name
git checkout -b fix/wrong_branch
# Correct:
git checkout develop
git checkout -b fix/correct_branch
Workflow pour les correctifs urgents#
Créer une branche de correctif urgent à partir de
release(oumainsi aucune branchereleasen’existe) :git checkout release # or: git checkout main git checkout -b hotfix/critical_bug
Appliquer la correction et valider les modifications.
Fusionner la correction de nouveau dans
release(oumain) :git checkout release # or: git checkout main git merge --no-ff hotfix/critical_bug
Faire un cherry-pick du correctif dans
develop:git checkout develop git cherry-pick <commit_hash>
Supprimer la branche de correctif urgent :
git branch -d hotfix/critical_bug
Avertissement
Ne pas fusionner fix/xxx ou hotfix/xxx directement dans main sans suivre le workflow. Assurez-vous que les correctifs urgents ont fait l’objet de cherry-pick dans develop pour éviter de perdre des correctifs dans les futures versions.
Workflow pour les versions correctives#
Dès qu’une version corrective est prête à être publiée (par exemple, 1.0.1, 1.0.2) :
S’assurer que la branche
releasecontient toutes les corrections souhaitées.Fusionner
releasedansmain:git checkout main git merge --no-ff release
Taguer la version sur
main:git tag -a v1.0.1 -m "Release version 1.0.1" git push origin main --tags
Conserver la branche
releasepour des correctifs supplémentaires dans la même série de versions mineures.
Workflow pour les versions mineures/majeures#
Dès qu’une nouvelle version mineure ou majeure est prête à être publiée (par exemple, 1.1.0, 2.0.0) :
Fusionner
developdansmain:git checkout main git merge --no-ff develop
Taguer la version sur
main:git tag -a v1.1.0 -m "Release version 1.1.0" git push origin main --tags
Supprimer l’ancienne branche
release(si elle existe) :git branch -d release git push origin --delete release
Créer une nouvelle branche
releaseà partir demainlorsque le premier correctif pour 1.1.1 est nécessaire :git checkout main git checkout -b release git push -u origin release
Bonnes pratiques#
Réorganiser régulièrement les branches de fonctionnalités sur
developpour rester à jour :git checkout develop/feature_name git rebase develop
Éviter les branches de longue durée pour minimiser les conflits de fusion.
S’assurer que les corrections de bogues dans
releaseoumainsont toujours sélectionnées dansdevelop.Différencier clairement entre
fix/xxx(correctifs non urgents) ethotfix/xxx(correctifs critiques pour la production).Lors de la création de la branche
release, mettre à jour les notes de version pour indiquer la version qu’elle cible (par exemple, ajouter un commentaire dans le commit de fusion : « Créer une branche de maintenance pour v1.0.x »).La branche
releasereprésente toujours la ligne de maintenance actuelle. Pour savoir quelle version elle cible, vérifiez le tag le plus récent surmainou les notes de version.
Conclusion#
Ce workflow garantit un processus de développement structuré mais flexible tout en maintenant main stable et develop toujours à jour avec les dernières modifications.
La branche release fournit une ligne de maintenance dédiée pour les versions correctives, permettant à develop de poursuivre avec de nouvelles fonctionnalités sans interférence. Cela résout le problème de la coordination des modifications non publiées à travers l’écosystème PlotPyStack (DataLab, Sigima, PlotPy, guidata, PythonQwt) en fournissant une branche stable pour les tests CI pendant les cycles de maintenance.