Aller au contenu
Réussir mon BTS SIO

Tape une notion, une commande ou le nom d'une épreuve.

Par exemple

Chapitre 1012 minDébutant

Workflows Git, issues et Conventional Commits

Par Josselyn C., prof de BTS SIO. Mis à jour le .

À la fin de ce chapitre, tu sauras

  • comparer GitHub Flow, Git Flow et le développement sur tronc commun ;
  • choisir le workflow adapté à ton équipe ;
  • écrire des messages de commit selon Conventional Commits ;
  • suivre le travail avec les issues et GitHub Projects.

3 exercices corrigés1 schéma

Un workflow Git est l'organisation des branches qu'une équipe adopte pour travailler ensemble : GitHub Flow (une branche par sujet, fusionnée dans main par pull request), Git Flow (des branches develop, release et hotfix en plus de main) ou le développement sur tronc commun. Ce chapitre compare ces trois modèles et dit lequel choisir pour un projet de BTS. Il présente aussi la convention Conventional Commits pour les messages, et le suivi des tâches avec les issues et les tableaux GitHub Projects, ce « suivi des problèmes » que demande le référentiel.

GitHub Flow : le modèle simple

C'est le modèle du chapitre précédent :

  • main est toujours stable et déployable ;
  • chaque sujet (fonctionnalité, correction, documentation) part de main dans une branche courte ;
  • la branche revient dans main par une pull request relue et testée ;
  • après la fusion, on déploie et on supprime la branche.

Il tient en une phrase, convient aux applications Web qu'on déploie souvent, et c'est celui que suivent la plupart des projets hébergés sur GitHub. Pour un projet de BTS à deux, trois ou quatre, c'est le bon choix.

Git Flow : des versions planifiées

Git Flow, proposé en 2010 par Vincent Driessen, organise le travail autour de versions numérotées qu'on livre à des dates précises. Il utilise deux branches permanentes et trois sortes de branches temporaires.

BrancheDurée de viePart deRevient dansRôle
mainPermanente——Uniquement les versions livrées, chacune marquée d'une étiquette (v1.0.0)
developPermanentemain—L'intégration du travail en cours pour la prochaine version
feature/…Quelques joursdevelopdevelopUne fonctionnalité
release/…Quelques joursdevelopmain et developLa préparation d'une version : derniers correctifs, numéro de version, notes de version
hotfix/…Quelques heuresmainmain et developUne correction urgente de la version en production
mainhotfix/developrelease/feature/v1.0.0v1.0.1v1.1.0correction urgentederniers correctifsfonctionnalité terminée
Git Flow : main pour les versions livrées, develop pour l'intégration, des branches feature, release et hotfix

Git Flow est adapté aux logiciels qui ont des versions installées chez les clients et plusieurs versions à maintenir en même temps : un logiciel de caisse, une application de bureau, un micrologiciel. Pour une application Web déployée plusieurs fois par semaine, il ajoute de la cérémonie sans bénéfice : son auteur lui-même conseille désormais un modèle plus simple dans ce cas. Si un sujet ou une entreprise te parle de develop et de release, c'est de Git Flow qu'il s'agit.

Le développement sur tronc commun

Dans le trunk-based development, tout le monde intègre son travail dans main (le tronc) au moins une fois par jour, directement ou par des branches qui vivent quelques heures. Les fonctionnalités inachevées sont livrées mais masquées par des interrupteurs dans le code (feature flags). Ce modèle suppose une batterie de tests automatiques solide et une équipe expérimentée : c'est celui des grandes entreprises qui déploient des dizaines de fois par jour.

Quel workflow choisir ?

SituationWorkflow conseillé
Projet de BTS, application Web, équipe de 2 à 5GitHub Flow
Application livrée en versions numérotées, installée chez des clientsGit Flow, ou GitHub Flow avec des étiquettes de version
Équipe expérimentée, tests automatiques complets, déploiements quotidiensDéveloppement sur tronc commun
Seul sur ton portfolioGitHub Flow, même seul : une branche par sujet garde main stable

Le pire workflow est celui que personne n'a choisi. Écris le vôtre en quelques lignes dans le README ou dans un fichier CONTRIBUTING.md : nommage des branches, format des messages, nombre d'approbations, méthode de fusion.

Des messages normalisés avec Conventional Commits

Conventional Commits est une convention d'écriture des messages de commit, adoptée par de nombreux projets libres et entreprises. Le titre suit le format :

text
type(portée): description
TypeUsage
featNouvelle fonctionnalité pour l'utilisateur
fixCorrection de bug
docsDocumentation seule
styleMise en forme du code, sans changement de comportement (espaces, point-virgule)
refactorRestructuration du code, sans nouvelle fonctionnalité ni correction
perfAmélioration des performances
testAjout ou correction de tests
buildSystème de construction, dépendances (package.json)
ciConfiguration de l'intégration continue
choreTâches diverses qui ne touchent ni le code de l'application ni les tests

La portée, facultative, précise la partie du projet : api, front, auth, export. La description commence par un verbe, sans point final. Exemples sur Sorbier Frais :

text
feat(export): ajoute l'export CSV des notes validées
fix(api): corrige le filtre par mois qui oubliait le dernier jour
docs: documente les variables d'environnement dans le README
test(notes): couvre le refus d'une note sans justificatif
refactor(indemnites): extrait le calcul kilométrique dans un service
ci: lance les tests sur Node.js 24

Un changement qui casse la compatibilité (une route d'API supprimée, un format de réponse modifié) se signale par un ! après le type, ou par un pied de message BREAKING CHANGE: :

text
feat(api)!: renvoie les montants en centimes

BREAKING CHANGE: le champ montant est désormais un entier en centimes.
Les clients doivent diviser par 100 pour afficher des euros.

Pourquoi s'y astreindre ? L'historique se lit d'un coup d'œil (git log --oneline --grep="^fix" liste les corrections), le relecteur repère un feat glissé dans une pull request censée ne contenir que des corrections, et des outils lisent ces préfixes pour calculer le prochain numéro de version et rédiger le CHANGELOG : un fix donne une version corrective, un feat une version mineure, un BREAKING CHANGE une version majeure (versionnage sémantique).

Les issues : le suivi des problèmes

Une issue (un ticket) décrit un travail à faire : un bug, une demande d'évolution, une tâche technique. Sur GitHub, l'onglet Issues du dépôt les rassemble. Chaque issue a un numéro (#12), un titre, une description, des commentaires, des étiquettes, une ou plusieurs personnes assignées et éventuellement un jalon (milestone, par exemple « Version 1.1 »).

Pour un bug, une bonne issue permet de le reproduire sans poser de question :

markdown
**Contexte** : liste des notes, filtre « Octobre 2026 », compte salarie1.

**Étapes pour reproduire**
1. Créer une note datée du 31/10/2026 à 18:00
2. Filtrer la liste sur octobre 2026

**Résultat attendu** : la note apparaît.
**Résultat obtenu** : la note n'apparaît pas. Elle apparaît si on ne filtre pas.

**Environnement** : version 1.0.2, Firefox sous Windows 11, serveur de recette.

Les modèles d'issues (issue templates), rangés dans .github/ISSUE_TEMPLATE/, préremplissent ce plan pour chaque nouveau signalement : un modèle « Bug » et un modèle « Demande d'évolution » suffisent.

Les issues se relient au code :

ÉcritureOùEffet
#12Message de commit, description de PR, commentaireLien vers l'issue 12, qui affiche la référence en retour
Closes #12, Fixes #12, Resolves #12Description de PR ou message de commitFerme l'issue 12 quand la PR (ou le commit) arrive sur la branche par défaut
fix/12-filtre-dateNom de brancheRien d'automatique, mais le lien se lit tout de suite

C'est exactement ce que le référentiel du BTS SIO appelle un « logiciel de gestion de versions et de suivi des problèmes » : un bug signalé, une issue, une branche, une pull request qui la ferme, une version qui la livre. À l'E6, cette chaîne prouve la sous-compétence « Recueillir, analyser et mettre à jour les informations sur une version d'une solution applicative » (les compétences de l'E6).

GitHub Projects : le tableau de l'équipe

GitHub Projects affiche les issues et les pull requests sous forme de tableau (colonnes Todo, In Progress, Done, à la manière d'un tableau Kanban), de liste ou de planning. Tu ajoutes des champs personnalisés : priorité, estimation, itération (sprint) de deux semaines. Les cartes changent de colonne automatiquement quand une issue est fermée ou une pull request fusionnée.

Pour une équipe de BTS, un tableau à trois colonnes, des issues assignées et un jalon par version suffisent. Ce tableau est une trace de la compétence « Travailler en mode projet » du bloc 1 : planification, répartition des tâches, suivi de l'avancement. Fais une capture du tableau à chaque fin d'itération pour ton portfolio (portfolio de l'E5).

Exercices

Exercice 1 sur 3 Écrire des messages Conventional Commits Réussi À revoir

Écris le titre du commit au format Conventional Commits pour chaque changement de Sorbier Frais.

  1. Ajout d'un bouton pour dupliquer une note de frais.
  2. Correction : le total affiché ignorait les frais de péage.
  3. Mise à jour d'Express vers la dernière version mineure.
  4. Ajout d'un test pour le refus d'une note sans justificatif.
  5. La route GET /notes renvoie désormais une liste paginée { items, total } au lieu d'un tableau.
Voir la réponseMasquer la réponse de l'exercice 1
  1. feat(front): ajoute la duplication d'une note de frais
  2. fix(notes): inclut les frais de péage dans le total
  3. build(deps): met à jour Express en dernière version mineure (ou chore(deps): … selon les conventions de l'équipe)
  4. test(notes): couvre le refus d'une note sans justificatif
  5. feat(api)!: pagine la liste des notes avec un pied BREAKING CHANGE: GET /notes renvoie { items, total } au lieu d'un tableau. C'est un changement incompatible : les clients de l'API doivent être modifiés.

Tu avais trouvé ?

Exercice 2 sur 3 Quel workflow ? Réussi À revoir

Pour chaque contexte, propose un workflow et justifie en une phrase.

  1. Le projet AP de ton équipe de trois, une application Symfony déployée sur le serveur de l'établissement.
  2. Un éditeur de logiciel de caisse qui livre deux versions par an chez 400 commerçants, et doit corriger en urgence la version installée pendant qu'il prépare la suivante.
  3. Ton portfolio personnel, publié sur GitHub Pages.
Voir la réponseMasquer la réponse de l'exercice 2
  1. GitHub Flow : simple, une branche et une pull request par sujet, main toujours prête à être montrée ou déployée.
  2. Git Flow : les branches release préparent les versions planifiées, et les branches hotfix partent de main pour corriger la version en production sans embarquer le travail en cours de develop.
  3. GitHub Flow, allégé : une branche par modification importante, fusionnée dans main, qui est publiée. La pull request n'a pas de relecteur, mais elle déclenche les vérifications automatiques.

Tu avais trouvé ?

Exercice 3 sur 3 De l'issue à la version Réussi À revoir

Un comptable signale que l'export CSV affiche les montants avec un point décimal, que son tableur ne lit pas. Décris la chaîne complète, de l'issue à la version livrée, avec les commandes Git et les actions sur GitHub, dans un projet en GitHub Flow.

Voir la réponseMasquer la réponse de l'exercice 3
  1. Créer l'issue « L'export CSV utilise un point décimal » (numéro 31, par exemple), avec les étapes pour reproduire, l'étiquette bug et le jalon « 1.2.1 ».
  2. git switch main, git pull, git switch -c fix/31-decimales-export.
  3. Corriger, ajouter un test, git commit -m "fix(export): utilise la virgule décimale dans le CSV".
  4. git push -u origin fix/31-decimales-export, puis ouvrir la pull request avec Closes #31 dans la description.
  5. Revue de code et tests verts, puis fusion : l'issue 31 se ferme automatiquement.
  6. Mettre à jour le CHANGELOG, puis étiqueter la version : git tag -a v1.2.1 -m "Version 1.2.1", git push origin v1.2.1, et publier la release sur GitHub (chapitre 11).

Tu avais trouvé ?

Chapitre terminé !

Fais les 3 exercices avant de passer à la suite : c'est en t'entraînant que tout se fixe.

chapitres
–
de série
–
du cours
–
Chapitre suivant : Tags Git, versions et CHANGELOGRevoir le sommaire du cours