Perche firmare
Un commit firmato attesta crittograficamente "questo commit e stato scritto dal possessore di questa chiave, immutato dalla firma". Le firme difendono da impersonificazione e manomissione.
Setup una tantum
gpg --full-generate-key
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
Firma su richiesta
git commit -S -m "Important change"
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
Agente GPG e pinentry
# ~/.gnupg/gpg-agent.conf
default-cache-ttl 28800
max-cache-ttl 86400
pinentry-program /usr/local/bin/pinentry-mac
Chiavi hardware
YubiKey o token simili possono contenere la chiave di firma GPG, richiedendo un tocco per commit.
Errori comuni
Impostare commit.gpgsign true senza un agente funzionante fa appendere ogni git commit su un pinentry bloccato.
Verificare un push remoto
git push --signed