Signing your git commits
Code pedigree is more important than ever with the ever increasing rate of supply chain attacks. Setting up code signing are a few steps, recorded here for reference.
Choice of key formats
While you could pick an ssh or x509 key, I shall stick to gpg and the Ed25519 algorythm.
Act 1 - get macOS ready
When you followed earlier advice you are good to go. If not, install Homebrew and dependencies
brew install gh gpg pinentry-mac
# setup pinentry
mkdir -p ~/.gnupg
chmod 700 ~/.gnupg
echo "pinentry-program $(brew --prefix)/bin/pinentry-mac" >> ~/.gnupg/gpg-agent.conf
gpgconf --kill gpg-agent
Act 2 - create the key
This creates a signing key that lasts for 2 years. Make sure to get the eMail right. After creation we extract the key id.
gpg --batch --quick-generate-key "John Doe <john.doe@example.com>" ed25519 sign
TARGET_EMAIL="john.doe@example.com"
GPG_KEY_ID=$(gpg --list-secret-keys --with-colons "$TARGET_EMAIL" 2>/dev/null \
| awk -F: '$1=="sec" {print $5; exit}')
echo Your key id is $GPG_KEY_ID
You also can do that manually running gpg --list-secret-keys --keyid-format=long and look for the string after the / in the line starting with sec.
Act 3 - configure your local git
Make sure to get the eMail right
git config --global user.name "John Doe"
git config --global user.email "$TARGET_EMAIL"
git config --global user.signingkey "$GPG_KEY_ID"
git config --global commit.gpgsign true
git config --global tag.gpgsign true
git config --global pull.rebase true
Act 4 - Let github know
Display the public key:
gpg --armor --export $GPG_KEY_ID
Go to your Github key settings, click on "New GPG key" and paste it
Act 5 - overwrite for individual repos (optional)
git config user.name "John Doe"
git config user.email "$TARGET_EMAIL"
git config user.signingkey "$GPG_KEY_ID"
git config commit.gpgsign true
git config tag.gpgsign true
git config pull.rebase true
For adventurous souls there is a setup script available to automate this. Use at your own risk.
As usual YMMV
Posted by Stephan H Wissel on 06 August 2026 | Comments (0) | categories: Development Github macOS





