Warum signieren
Ein signierter Commit bezeugt kryptographisch "dieser Commit wurde vom Inhaber dieses Schlussels verfasst, unverandert seit der Signatur".
Einmalige Einrichtung
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
Auf Anforderung signieren
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
GPG-Agent und Pinentry
# ~/.gnupg/gpg-agent.conf
default-cache-ttl 28800
max-cache-ttl 86400
pinentry-program /usr/local/bin/pinentry-mac
Hardware-Schlussel
YubiKey oder ahnliche Token konnen den GPG-Signierschlussel halten und einen Touch pro Commit verlangen.
Haufige Fehler
commit.gpgsign true ohne funktionierenden Agent setzen lasst jeden git commit an einem hangenden Pinentry hangen.
Remote-Push verifizieren
git push --signed