Maintenir un projet Git implique d’accepter les contributions, de préparer les releases et de garder un historique exploitable. Que vous gériez un projet open source ou un dépôt d’équipe interne, ce guide couvre les outils et pratiques du mainteneur.
Prérequis : Pull requests et code review et Tags et versions.
Ce que vous allez apprendre
Section intitulée « Ce que vous allez apprendre »- Accepter des contributions externes avec le workflow fork + PR
- Préparer et tagger une release selon la convention SemVer
- Générer un changelog à partir de l’historique Git
- Maintenir les branches de maintenance pour les correctifs sur versions stables
Accepter des contributions
Section intitulée « Accepter des contributions »Via pull/merge request (workflow standard)
Section intitulée « Via pull/merge request (workflow standard) »La méthode la plus courante sur GitHub/GitLab :
-
Le contributeur ouvre une PR/MR
-
Vous reviewez le code (voir le guide PR)
-
Vous demandez des corrections si nécessaire
-
Quand le code est prêt, vous mergez avec la stratégie choisie (merge commit, squash, ou rebase)
-
Vous supprimez la branche source
Via patches (workflow email/legacy)
Section intitulée « Via patches (workflow email/legacy) »Certains projets (comme le noyau Linux) utilisent encore les patches par email. Git fournit deux commandes pour ce workflow.
Côté contributeur — générer les patches :
# Créer un fichier .patch par commit (depuis main)git format-patch mainRésultat : des fichiers comme 0001-Ajouter-la-validation.patch,
0002-Corriger-le-timeout.patch.
Chaque fichier contient le diff, le message de commit, l’auteur et la date. Le contributeur envoie ces fichiers par email ou les joint à un ticket.
Côté mainteneur — appliquer les patches :
# Appliquer un patch (crée un commit avec l'auteur original)git am 0001-Ajouter-la-validation.patch
# Appliquer tous les patches d'un dossiergit am patches/*.patchgit am (apply mailbox) conserve l’auteur, la date et le message
originaux.
Si un conflit survient pendant git am :
# Résoudre le conflit dans le fichiergit add fichier-en-conflit.txtgit am --continue
# Ou abandonnergit am --abortPréparer une release
Section intitulée « Préparer une release »1. Vérifier l’état du projet
Section intitulée « 1. Vérifier l’état du projet »# Branches non mergéesgit branch --no-merged main
# Derniers commits depuis la dernière releasegit log v1.2.0..HEAD --oneline2. Mettre à jour le changelog
Section intitulée « 2. Mettre à jour le changelog »Le changelog documente les changements visibles pour les utilisateurs. Format recommandé (Keep a Changelog) :
## [1.3.0] - 2026-03-28
### Added- Composant Avatar avec upload d'image (#42)- Support du mode sombre (#38)
### Fixed- Redirect après déconnexion (#45)- Timeout API sur les grandes requêtes (#41)
### Changed- Mise à jour de la dépendance auth-lib vers 3.x3. Taguer la release
Section intitulée « 3. Taguer la release »# Tag annoté avec messagegit tag -a v1.3.0 -m "Release 1.3.0 : avatar, mode sombre, corrections"
# Pousser le taggit push origin v1.3.04. git describe : identifier une version
Section intitulée « 4. git describe : identifier une version »git describe génère un nom de version lisible basé sur le dernier
tag :
git describev1.3.0-5-g2a1b3c4Décodage : 5 commits après le tag v1.3.0, sur le commit
2a1b3c4.
Options utiles :
# Inclure les tags légersgit describe --tags
# Toujours afficher le hash longgit describe --longgit describe est utile dans les scripts de build pour identifier
la version exacte d’un binaire.
Générer un changelog automatique
Section intitulée « Générer un changelog automatique »Depuis les commits
Section intitulée « Depuis les commits »Si vos messages de commit suivent une convention (Conventional Commits), des outils peuvent générer le changelog automatiquement :
# Commits depuis le dernier tag, groupés par typegit log v1.2.0..HEAD --oneline | grep -E '^[a-f0-9]+ (feat|fix|docs|chore)'Outils dédiés
Section intitulée « Outils dédiés »| Outil | Langage | Convention requise |
|---|---|---|
conventional-changelog | Node.js | Conventional Commits |
git-cliff | Rust | Configurable |
changie | Go | YAML fragments |
release-please | GitHub Action | Conventional Commits |
Notes de release (GitHub/GitLab)
Section intitulée « Notes de release (GitHub/GitLab) »Les plateformes permettent de créer des notes de release associées à un tag :
- GitHub : Releases → Draft a new release → sélectionner le tag → rédiger les notes (ou « Generate release notes » automatique)
- GitLab : Deployments → Releases → New release
Les notes de release incluent généralement :
- Un résumé des changements (depuis le changelog)
- Les contributeurs
- Les liens vers les issues/PR fermées
- Les instructions de migration si breaking changes
Bonnes pratiques du mainteneur
Section intitulée « Bonnes pratiques du mainteneur »- Répondez rapidement aux PR/issues (même si c’est « je regarde cette semaine »)
- Documentez les conventions : CONTRIBUTING.md, templates de PR/issue
- Taguez les issues :
good first issue,help wanted,bug,enhancement - Versionnez sémantiquement : SemVer
- Automatisez : CI/CD, linting, changelog, release notes
- Communiquez les breaking changes clairement dans le changelog et les notes de release
Gérer les PR abandonnées
Section intitulée « Gérer les PR abandonnées »Une PR abandonnée est une PR ouverte depuis plusieurs semaines sans activité de la part du contributeur. Voici comment la traiter :
-
Évaluez la valeur : le changement est-il encore pertinent ?
-
Relancez une seule fois avec un message clair :
Bonjour @contributeur, ce changement nous intéresse toujours.Pourriez-vous résoudre les conflits et mettre à jour la branche ?Nous clôturerons cette PR sous 2 semaines sans réponse. -
Si pas de réponse : fermez la PR avec un message bienveillant en précisant qu’elle peut être rouverte ou recréée :
Clôture faute d'activité. Le changement reste bienvenu — n'hésitezpas à recréer une PR depuis une branche à jour. -
Si le changement est utile, vous pouvez vous-même reprendre le travail sur une nouvelle branche en créditant l’auteur original dans le message de commit :
Fenêtre de terminal git commit -m "feat: ajouter XCo-authored-by: Prénom Nom <email@example.com>"
Communiquer les breaking changes
Section intitulée « Communiquer les breaking changes »Un breaking change est une modification qui casse la compatibilité avec les utilisateurs existants (changement d’API, suppression d’une option, changement de comportement par défaut).
Dans le changelog
Section intitulée « Dans le changelog »Marquez les breaking changes explicitement dans le changelog :
## [2.0.0] - 2026-04-01
### BREAKING CHANGES- Suppression de l'option `--legacy-mode` (remplacée par `--compat v1`)- L'option `--output` accepte maintenant un chemin absolu uniquement
### Migration depuis 1.xRemplacez `--legacy-mode` par `--compat v1` dans vos scripts.Dans les notes de release et le tag
Section intitulée « Dans les notes de release et le tag »Préfixez le message du tag annoté avec une mention explicite :
git tag -a v2.0.0 -m "BREAKING: suppression --legacy-mode. Voir CHANGELOG pour la migration."git push origin v2.0.0Avec SemVer
Section intitulée « Avec SemVer »Un breaking change justifie un incrément majeur (1.x.y → 2.0.0). Ne jamais introduire un breaking change dans un patch ou un mineur. Voir Tags et versions.
Dépannage : problèmes courants
Section intitulée « Dépannage : problèmes courants »| Symptôme | Cause probable | Solution |
|---|---|---|
git am échoue avec un conflit | Patch basé sur un autre commit | git am --3way pour un merge 3-way |
git describe retourne une erreur | Aucun tag dans l’historique | Créez un tag initial v0.0.1 |
| Changelog incohérent | Messages de commit non structurés | Adoptez Conventional Commits + commitlint |
| Release taguée sur le mauvais commit | Tag posé trop tôt/tard | git tag -d v1.3.0 puis retaguer |
À retenir
Section intitulée « À retenir »- PR/MR : le workflow standard pour accepter les contributions
git format-patch+git am: le workflow patches pour les projets sans plateforme webgit tag -acrée un tag annoté pour marquer une releasegit describegénère un identifiant de version basé sur le dernier tag- Keep a Changelog + Conventional Commits structurent la documentation des changements
- Automatisez autant que possible : changelog, release notes, CI