Computer screen displays "vibe vibe coding" text.

Apps

VS Code Ajoute "Co-Authored-by Copilot" à Chaque Commit

L'extension Copilot de VS Code injecte silencieusement un trailer Co-Authored-by dans vos commits — même quand vous avez écrit chaque ligne vous-même. Voici exactement comment l'arrêter.

TLDR L'extension VS Code de GitHub Copilot ajoute automatiquement un trailer Co-authored-by: GitHub Copilot aux messages de commit dès qu'il est impliqué dans leur génération — et parfois même quand ce n'est pas le cas. Cela affecte les enregistrements d'attribution, les historiques de contributions open-source, et potentiellement les politiques de propriété intellectuelle des employeurs. Vous pouvez le neutraliser avec un hook git, un changement dans les paramètres VS Code, ou une règle gitconfig globale — chacun avec ses propres compromis.

Si vous avez récemment jeté un œil à votre git log et remarqué une ligne inconnue au bas de messages de commit que vous avez entièrement écrits vous-même, vous ne rêvez pas. GitHub Copilot — ou plus précisément, l'extension VS Code Copilot — appose discrètement son nom sur vos commits en tant que co-auteur, qu'il ait touché ou non une seule ligne de ce push. Ce n'est pas une conspiration ; c'est un système d'attribution opt-out-by-default que la plupart des développeurs n'ont jamais accepté en connaissance de cause. Ce qui suit est une analyse précise du fonctionnement de l'injection, des raisons pour lesquelles GitHub l'a conçue ainsi, et — surtout — des paramètres, hooks et configurations exacts qui permettront de l'arrêter.

Panneau de contrôle source VS Code affichant la génération de message de commit par Copilot


Ce que le Trailer Ressemble Exactement

Avant de corriger quoi que ce soit, il est utile de savoir exactement à quoi vous avez affaire. Le texte injecté est un trailer de commit git standard — une paire clé-valeur ajoutée après une ligne vide à la fin du corps de votre message de commit. Il suit le même format utilisé par git interpret-trailers et des outils comme Gerrit et l'infrastructure de fusion propre à GitHub :

feat: add user authentication flow

Implement JWT-based login with refresh token rotation.

Co-authored-by: GitHub Copilot <github-copilot[bot]@users.noreply.github.com>

Cette dernière ligne est ce que Copilot injecte. L'adresse e-mail github-copilot[bot]@users.noreply.github.com est un vrai compte bot GitHub, ce qui signifie que le graphe de contributions de GitHub et son moteur d'attribution des commits enregistre réellement cela comme une co-paternité — pas un commentaire, pas des métadonnées que vous pouvez ignorer. C'est un objet git de première classe incorporé définitivement dans votre historique de commits une fois poussé.

Où Cela Apparaît

  • La vue des commits GitHub : Le commit affichera un badge "Co-authored by GitHub Copilot" à côté de votre avatar.
  • git log --format=full : Le trailer apparaît dans le corps complet du commit.
  • git shortlog : Selon le parsing, Copilot peut apparaître comme contributeur dans les statistiques du projet.
  • Le graphe des contributeurs GitHub : Le compte bot peut s'enregistrer comme contributeur sur votre dépôt.
Warning Une fois que vous avez poussé un commit contenant ce trailer sur un remote partagé, réécrire l'historique (via git rebase -i ou git filter-branch) pour le supprimer est une opération destructive qui forcera un push et brisera les historiques locaux de vos coéquipiers. La prévention est nettement plus simple que la remédiation.

Le Commit Où Il Apparaît le Plus Souvent

L'injection est la plus agressive lorsque vous utilisez la fonctionnalité Générer un message de commit de VS Code — l'icône étincelle (✨) dans la barre latérale Source Control. Cliquez dessus, Copilot rédige un message, et le trailer de co-auteur est inclus avant même que vous confirmiez. Mais des retours de développeurs confirment qu'il apparaît aussi dans des commits où le message a été écrit manuellement, en particulier si Copilot Chat était actif dans cette session et avait été utilisé pour générer du code dans les fichiers stagés.


Le Mécanisme Derrière l'Injection

L'extension VS Code de GitHub Copilot s'intègre à bas niveau avec l'API Source Control Manager (SCM) de VS Code. Lorsque vous stagez des fichiers et ouvrez la zone de saisie du message de commit, Copilot s'enregistre comme fournisseur de la zone de saisie SCM et peut préremplir ou modifier ce champ de texte — y compris en ajoutant des trailers par programmation avant que vous ayez tapé un seul caractère.

Ce n'est pas une fonctionnalité indésirable. C'est un comportement documenté lié à la philosophie d'attribution IA de GitHub : si un modèle d'IA a substantiellement contribué à un travail, GitHub estime que cette contribution doit être enregistrée. Le problème est dans l'exécution : "a substantiellement contribué" a été interprété très largement par l'extension, et l'UX de désinscription est enfouie plusieurs menus en profondeur plutôt que d'être une invite de premier lancement bien visible.

Comment l'API SCM de VS Code Le Permet

VS Code expose vscode.scm.inputBox et des API associées auxquelles les extensions peuvent se connecter. L'extension Copilot l'utilise pour :

  1. Observer quels fichiers sont stagés et leurs diffs.
  2. Déterminer si Copilot a été invoqué (ou simplement actif) lors de l'édition de ces fichiers.
  3. Générer un message de commit via l'API Copilot.
  4. Injecter le message — y compris le trailer — dans le champ de saisie du commit avant la soumission.

L'injection se produit côté client dans VS Code, pas sur les serveurs de GitHub, ce qui signifie que les règles côté serveur ou les protections de branche ne peuvent pas l'intercepter avant qu'elle entre dans votre historique.

Info Ce comportement est distinct de l'attribution Copilot côté serveur de GitHub pour les pull requests. Ce que fait l'extension VS Code est une injection de texte côté client dans le champ de message de commit — un chemin de code entièrement différent.

Cela Se Produit-Il Sans Utiliser la Fonctionnalité de Génération ?

Oui — et c'est ce qui frustre le plus les développeurs. Des utilisateurs signalent que le trailer apparaît même quand :

  • Ils ont écrit le message de commit manuellement (pas via le bouton étincelle).
  • Les modifications stagées ont été entièrement tapées à la main.
  • Copilot Chat était ouvert mais n'a pas été consulté pour la tâche en cours.

L'heuristique de l'extension pour "Copilot était impliqué" est approximative. Si Copilot était actif pendant la session d'édition pour n'importe quel fichier dans le diff — même si vous avez rejeté toutes les suggestions — il peut quand même ajouter le trailer. C'est le cœur de la plainte : ce n'est pas une attribution pour une contribution IA réelle, c'est une attribution par proximité.


Pourquoi Cela Compte Au-Delà de l'Esthétique

Un co-auteur fantôme dans votre git log peut sembler une nuisance cosmétique, mais il y a de vraies conséquences en aval qui valent la peine d'être comprises avant de décider à quel point agir urgemment.

Développeur consultant le git log dans un terminal affichant des commits co-autorisés

Propriété Intellectuelle et Politiques des Employeurs

De nombreux employeurs — en particulier dans les secteurs réglementés comme la finance, la santé et la défense — ont des politiques explicites de propriété intellectuelle concernant le code généré par l'IA. Une ligne Co-authored-by: GitHub Copilot dans un commit sur une base de code propriétaire est un enregistrement documenté que des outils d'IA ont été impliqués dans la création de ce code. Même si Copilot n'a autocomplété qu'un crochet fermant, ce trailer crée une piste d'audit que les équipes juridiques peuvent avoir besoin de traiter.

Si votre entreprise n'a pas explicitement autorisé l'utilisation de Copilot pour le code de production, ce trailer est une responsabilité à laquelle vous n'avez pas souscrit.

Implications pour les Licences Open-Source

Le statut juridique du code généré par l'IA et sa compatibilité avec les licences copyleft (GPL, AGPL) est encore incertain. Les projets avec des politiques de contribution strictes peuvent rejeter ou exiger des réécritures d'historique pour des commits incluant une attribution Copilot — la FSF et d'autres organisations ont publié des positions à ce sujet. Si vous maintenez un projet open-source avec des contributeurs qui attendent une provenance propre, les trailers Copilot dans votre historique compliquent les choses.

Statistiques des Contributeurs et Portfolios d'Embauche

Les profils GitHub et les graphes de contributions sont de plus en plus utilisés comme portfolios informels — par les recruteurs, les collaborateurs potentiels, les comités de programme de conférences. Avoir un bot listé comme co-auteur sur des commits dans vos dépôts publics brouille le signal d'attribution que ces graphes sont censés fournir. C'est une chose mineure, mais c'est votre historique.

Warning Si vous êtes freelance ou consultant et que vos clients examinent votre historique git dans le cadre de l'acceptation des livrables, une attribution Copilot sur des dépôts appartenant aux clients pourrait déclencher des questions contractuelles que vous préféreriez éviter.

Quatre Façons de l'Arrêter

Il n'existe pas de solution unique qui fonctionne pour tous les workflows. La bonne approche dépend de si vous voulez une solution globale, une substitution par dépôt, ou quelque chose qui préserve la génération de messages de commit de Copilot mais supprime uniquement le trailer.

Option 1 — Paramètres de l'Extension VS Code

La route la plus directe est de désactiver le comportement depuis les paramètres VS Code. Ouvrez les paramètres (Ctrl+, ou Cmd+,), puis recherchez "copilot commit". Vous cherchez des options sous l'extension GitHub Copilot liées à la génération de messages de commit et à l'attribution des co-auteurs.

Dans settings.json, le chemin de configuration pertinent ressemble à ceci :

{
  "github.copilot.chat.generateCommitMessage.enabled": false
}

Désactiver entièrement la génération de messages de commit stoppe l'injection à la source — Copilot ne remplira plus le champ de saisie du commit, donc il n'y a aucune occasion d'ajouter le trailer. Si vous voulez toujours des messages de commit assistés par IA mais sans la ligne d'attribution, certaines versions de l'extension exposent un toggle séparé spécifiquement pour le trailer de co-auteur. Naviguez vers Extensions > GitHub Copilot > Paramètres dans la barre latérale VS Code pour vérifier ce qui est disponible dans votre version installée, car les noms exacts des paramètres ont changé selon les versions de l'extension Copilot.

Tip L'interface des paramètres VS Code affichera la version actuelle de l'extension à côté de ses paramètres. Si vous utilisez une ancienne version de Copilot, mettre à jour l'extension peut vous donner des contrôles plus précis sur le comportement d'attribution — Microsoft a répondu aux retours de la communauté à ce sujet.

Option 2 — Hook Git (Le Plus Fiable)

Un hook prepare-commit-msg s'exécute automatiquement avant l'ouverture de l'éditeur de message de commit, et il peut supprimer chirurgicalement le trailer Copilot quelle que soit son origine. Cette approche fonctionne indépendamment de VS Code, survit aux mises à jour d'extensions, et s'applique à tout client git que vous utilisez dans le dépôt.

Créez le fichier hook dans .git/hooks/prepare-commit-msg :

#!/bin/sh
# Strip GitHub Copilot co-author trailer from commit messages
sed -i '/^Co-authored-by: GitHub Copilot/Id' "$1"

Puis rendez-le exécutable :

chmod +x .git/hooks/prepare-commit-msg

Pour une solution à l'échelle de l'équipe, utilisez un répertoire de hooks partagé commité dans le dépôt et configurez git pour l'utiliser :

# In .gitconfig or the repo's local config
git config core.hooksPath .githooks

Puis commitez votre hook dans .githooks/prepare-commit-msg avec le même contenu ci-dessus. Chaque développeur qui clone le dépôt et exécute git config core.hooksPath .githooks (ou si vous automatisez cela dans un script de configuration) aura le comportement de suppression appliqué.

Info Le flag -i sur sed édite le fichier en place. Sur macOS, le sed BSD nécessite une extension de sauvegarde explicite : sed -i '' '/^Co-authored-by: GitHub Copilot/Id' "$1". Ajoutez un conditionnel shell si votre équipe utilise à la fois Linux et macOS.

Option 3 — Désactiver Copilot par Workspace

Si votre préoccupation est spécifique à un dépôt (par exemple, un projet client ou un dépôt open-source avec des règles de provenance strictes), vous pouvez désactiver Copilot entièrement pour ce workspace sans toucher à votre configuration globale. À la racine du dépôt, créez ou modifiez .vscode/settings.json :

{
  "github.copilot.enable": {
    "*": false
  }
}

Cela désactive toutes les fonctionnalités Copilot — complétions, chat et génération de messages de commit — uniquement dans ce workspace. Quand vous passez à un projet personnel, Copilot fonctionne normalement. L'inconvénient est que vous perdez toute l'assistance Copilot dans ce dépôt, pas seulement l'injection de co-auteur.

Option 4 — Règle de Nettoyage gitconfig Globale

Si vous voyez le trailer s'infiltrer dans des commits depuis plusieurs outils et environnements (pas seulement VS Code), un hook prepare-commit-msg global dans le répertoire de templates git de votre répertoire personnel couvre tout :

# Set a global hooks template directory
git config --global init.templateDir ~/.git-templates

# Create the directory and hook
mkdir -p ~/.git-templates/hooks
cat > ~/.git-templates/hooks/prepare-commit-msg << 'EOF'
#!/bin/sh
sed -i '/^Co-authored-by: GitHub Copilot/Id' "$1"
EOF
chmod +x ~/.git-templates/hooks/prepare-commit-msg

Tout nouveau dépôt que vous initialisez ou clonez après ce point héritera automatiquement de ce hook. Pour les dépôts existants, exécutez git init à la racine du dépôt — c'est sans risque sur les dépôts existants et copiera les hooks du template sans toucher à votre historique.


Comparaison de Vos Options

Méthode Portée Supprime le Trailer Préserve les Complétions Partageable en Équipe Survit aux MàJ d'Extension
Paramètre VS Code (désactiver la génération) Global ou workspace Oui Non Via commit settings.json Oui
Hook prepare-commit-msg (local) Par dépôt Oui Oui Via le pattern .githooks/ Oui
Désactivation workspace (copilot.enable) Par dépôt Oui Non Via .vscode/settings.json Oui
Hook de template git global Tous les dépôts (nouveaux et futurs) Oui Oui Non (niveau utilisateur) Oui
Désactiver l'extension Copilot entièrement Global Oui Non N/A N/A

Idéal pour les individus qui veulent garder les complétions Copilot : hook prepare-commit-msg + template global.

Idéal pour les équipes avec des politiques partagées : répertoire .githooks/ commité avec documentation de configuration.

Idéal pour les dépôts clients sensibles : copilot.enable: false au niveau workspace commité dans .vscode/settings.json.


Nettoyer les Commits Qui L'ont Déjà

Si vous avez déjà poussé des commits avec le trailer Copilot sur un dépôt privé et souhaitez nettoyer l'historique, l'opération nécessite une réécriture forcée. Ne faites cela que sur des branches où vous êtes le seul contributeur et où vous comprenez les conséquences de la modification des SHAs de commit.

# Interactive rebase to edit recent commits
git rebase -i HEAD~10

# For each offending commit, mark it 'reword' then remove the trailer line
# Or use filter-branch for bulk cleaning:
git filter-branch --msg-filter \
  'sed "/^Co-authored-by: GitHub Copilot/Id"' \
  HEAD~20..HEAD

Après la réécriture, vous devrez forcer le push :

git push --force-with-lease origin your-branch
Warning --force-with-lease est plus sûr que --force car il refusera de pousser si quelqu'un d'autre a poussé sur la branche depuis votre dernier fetch. Cela ne protège pas les branches partagées publiques — coordonnez avec votre équipe avant de faire cela sur autre chose qu'une branche de fonctionnalité personnelle.

Pour les dépôts déjà poussés sur GitHub public où vous ne souhaitez pas réécrire l'historique, la réponse pragmatique est : documentez la situation dans le fichier CONTRIBUTING de votre projet, ajoutez un hook pour l'avenir, et acceptez que les anciens commits sont ce qu'ils sont. Les réécritures d'historique sur des dépôts publics actifs causent plus de problèmes qu'elles n'en résolvent.

Paramètres du dépôt GitHub affichant les règles de protection de branche


Liste de Vérification Rapide

Suivez ces étapes dans l'ordre selon votre situation :

  1. Confirmez que vous voyez le trailer : Exécutez git log --format=full -5 et vérifiez la présence de Co-authored-by: GitHub Copilot au bas du corps de tout commit.
  2. Installez le hook prepare-commit-msg dans le dépôt concerné — c'est le correctif à moindre friction et à plus haute fiabilité.
  3. Vérifiez vos paramètres Copilot VS Code : Ouvrez les paramètres, recherchez "copilot commit", et désactivez la génération de messages de commit si vous n'utilisez pas le bouton étincelle.
  4. Pour les dépôts sensibles : Ajoutez un .vscode/settings.json qui désactive Copilot pour ce workspace, et commitez-le pour que les coéquipiers héritent du paramètre.
  5. Pour les environnements d'équipe : Créez un répertoire .githooks/, ajoutez le script prepare-commit-msg, commitez-le, et ajoutez git config core.hooksPath .githooks aux instructions de configuration de votre projet ou à votre Makefile.
  6. Configurez le template git global si vous travaillez sur de nombreux dépôts personnels et souhaitez une couverture automatique et permanente.
  7. Auditez les commits récents sur les branches partagées : Utilisez git log --grep="Co-authored-by: GitHub Copilot" --oneline pour trouver les commits affectés avant de décider si un nettoyage d'historique est justifié.
  8. Vérifiez que le correctif fonctionne : Stagez un fichier, laissez VS Code ouvrir la boîte de dialogue de commit, vérifiez que le trailer est absent avant de confirmer le commit.

Sources & Lectures Complémentaires

  • Documentation GitHub — Attribution par Trailer de Commit — La documentation officielle de GitHub sur le fonctionnement des trailers de co-auteur dans le graphe de contributions GitHub et ce que le format Co-authored-by signifie pour les statistiques des dépôts et l'attribution des pull requests.

  • Changelog de l'Extension GitHub Copilot VS Code (marketplace.visualstudio.com) — Les notes de version de l'extension Copilot documentent quand la génération de messages de commit a été introduite et les changements ultérieurs du comportement d'attribution ; recherchez les versions à partir de fin 2023.

  • git-scm.com — Documentation githooks — La référence faisant autorité pour le hook prepare-commit-msg, son contexte d'invocation, ses arguments, et comment il interagit avec le processus de commit selon les différents clients git.

  • Software Freedom Conservancy — Copyleft et Code Généré par l'IA — L'analyse publiée par la SFC sur la façon dont les sorties des modèles d'IA interagissent avec les obligations de licence GPL et AGPL, pertinent pour les mainteneurs open-source décidant comment gérer l'attribution Copilot dans leurs projets.

  • Forum de la Communauté GitHub — "Copilot adding Co-authored-by without my input" — Fils de discussion en cours documentant des cas réels du comportement d'injection, des solutions confirmées par les utilisateurs, et les réponses du personnel GitHub sur la conception prévue par rapport aux cas limites signalés.