Pourquoi signer
Un commit signé atteste cryptographiquement que "ce commit a été créé par le détenteur de cette clé, sans changement depuis la signature." Les signatures défendent contre l'usurpation et l'altération, et des plateformes comme GitHub affichent un badge "Verified" quand la signature correspond à une clé configurée.
Configuration unique
gpg --full-generate-key # choisir RSA 4096 ou Ed25519
gpg --list-secret-keys --keyid-format=long
git config --global user.signingkey 0xABCDEF1234567890
git config --global commit.gpgsign true
git config --global tag.gpgsign true
gpg --armor --export 0xABCDEF1234567890
Signer à la demande
git commit -S -m "Changement important"
git tag -s v1.0.0 -m "Release 1.0.0"
git log --show-signature
git verify-commit <sha>
git verify-tag v1.0.0
GPG agent et pinentry
# ~/.gnupg/gpg-agent.conf
default-cache-ttl 28800
max-cache-ttl 86400
pinentry-program /usr/local/bin/pinentry-mac
Clés matérielles
YubiKey ou tokens similaires peuvent contenir la clé de signature GPG, exigeant un toucher par commit.
WSL et SSH
Si vous signez depuis WSL ou via SSH, configurez correctement le forwarding de l'agent. Définissez GPG_TTY=$(tty).
Erreurs courantes
Définir commit.gpgsign true sans agent fonctionnel fait que chaque git commit bloque sur un pinentry. Oublier de publier votre clé publique sur la plateforme laisse des badges "Unverified". Les clés expirent.
Vérifier un push remote
git push --signed