Aller au contenu
Développement medium
🔐 Alerte sécurité — Incident supply chain Trivy : lire mon analyse de l'attaque

Maintenir un projet Git

10 min de lecture

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.

  • 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

La méthode la plus courante sur GitHub/GitLab :

  1. Le contributeur ouvre une PR/MR

  2. Vous reviewez le code (voir le guide PR)

  3. Vous demandez des corrections si nécessaire

  4. Quand le code est prêt, vous mergez avec la stratégie choisie (merge commit, squash, ou rebase)

  5. Vous supprimez la branche source

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 :

Fenêtre de terminal
# Créer un fichier .patch par commit (depuis main)
git format-patch main

Ré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 :

Fenêtre de terminal
# Appliquer un patch (crée un commit avec l'auteur original)
git am 0001-Ajouter-la-validation.patch
# Appliquer tous les patches d'un dossier
git am patches/*.patch

git am (apply mailbox) conserve l’auteur, la date et le message originaux.

Si un conflit survient pendant git am :

Fenêtre de terminal
# Résoudre le conflit dans le fichier
git add fichier-en-conflit.txt
git am --continue
# Ou abandonner
git am --abort
Fenêtre de terminal
# Branches non mergées
git branch --no-merged main
# Derniers commits depuis la dernière release
git log v1.2.0..HEAD --oneline

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.x
Fenêtre de terminal
# Tag annoté avec message
git tag -a v1.3.0 -m "Release 1.3.0 : avatar, mode sombre, corrections"
# Pousser le tag
git push origin v1.3.0

git describe génère un nom de version lisible basé sur le dernier tag :

Fenêtre de terminal
git describe
v1.3.0-5-g2a1b3c4

Décodage : 5 commits après le tag v1.3.0, sur le commit 2a1b3c4.

Options utiles :

Fenêtre de terminal
# Inclure les tags légers
git describe --tags
# Toujours afficher le hash long
git describe --long

git describe est utile dans les scripts de build pour identifier la version exacte d’un binaire.

Si vos messages de commit suivent une convention (Conventional Commits), des outils peuvent générer le changelog automatiquement :

Fenêtre de terminal
# Commits depuis le dernier tag, groupés par type
git log v1.2.0..HEAD --oneline | grep -E '^[a-f0-9]+ (feat|fix|docs|chore)'
OutilLangageConvention requise
conventional-changelogNode.jsConventional Commits
git-cliffRustConfigurable
changieGoYAML fragments
release-pleaseGitHub ActionConventional Commits

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
  1. Répondez rapidement aux PR/issues (même si c’est « je regarde cette semaine »)
  2. Documentez les conventions : CONTRIBUTING.md, templates de PR/issue
  3. Taguez les issues : good first issue, help wanted, bug, enhancement
  4. Versionnez sémantiquement : SemVer
  5. Automatisez : CI/CD, linting, changelog, release notes
  6. Communiquez les breaking changes clairement dans le changelog et les notes de release

Une PR abandonnée est une PR ouverte depuis plusieurs semaines sans activité de la part du contributeur. Voici comment la traiter :

  1. Évaluez la valeur : le changement est-il encore pertinent ?

  2. 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.
  3. 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ésitez
    pas à recréer une PR depuis une branche à jour.
  4. 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 X
    Co-authored-by: Prénom Nom <email@example.com>"

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).

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.x
Remplacez `--legacy-mode` par `--compat v1` dans vos scripts.

Préfixez le message du tag annoté avec une mention explicite :

Fenêtre de terminal
git tag -a v2.0.0 -m "BREAKING: suppression --legacy-mode. Voir CHANGELOG pour la migration."
git push origin v2.0.0

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.

SymptômeCause probableSolution
git am échoue avec un conflitPatch basé sur un autre commitgit am --3way pour un merge 3-way
git describe retourne une erreurAucun tag dans l’historiqueCréez un tag initial v0.0.1
Changelog incohérentMessages de commit non structurésAdoptez Conventional Commits + commitlint
Release taguée sur le mauvais commitTag posé trop tôt/tardgit tag -d v1.3.0 puis retaguer
  • PR/MR : le workflow standard pour accepter les contributions
  • git format-patch + git am : le workflow patches pour les projets sans plateforme web
  • git tag -a crée un tag annoté pour marquer une release
  • git describe gé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

Ce site vous est utile ?

Sachez que moins de 1% des lecteurs soutiennent ce site.

Je maintiens +700 guides gratuits, sans pub ni tracing. Aujourd'hui, ce site ne couvre même pas mes frais d'hébergement, d'électricité, de matériel, de logiciels, mais surtout de cafés.

Un soutien régulier, même symbolique, m'aide à garder ces ressources gratuites et à continuer de produire des guides de qualité. Merci pour votre appui.

Abonnez-vous et suivez mon actualité DevSecOps sur LinkedIn