Signing Git commits using GPG
Installation
To sign git commits on macOS, we need to install gpg
and pinentry-mac
(for storing passphrase in keychain).
$ brew install gpg pinentry-mac |
Setup GPG
Run the following command to set pinentry-mac
as pinentry-program
in ~/.gnupg/gpg-agent.conf
:
$ echo "pinentry-program $(brew --prefix)/bin/pinentry-mac" >> ~/.gnupg/gpg-agent.conf |
Add the following line to ~/.gnupg/gpg.conf
:
use-agent |
Generate a GPG key
$ gpg --full-generate-key |
Follow the instruction here: Generating a new GPG key
Confirm GPG is working
$ echo "hello world" | gpg --clearsign |
We can restart gpg agent if needed:
$ gpgconf --kill gpg-agent |
Set GPG signing key in Git
List all the keys:
$ gpg --list-secret-keys --keyid-format LONG |
In the output find out the Key ID with the following format (assuming we picked RSA
and 4096
bits key size when generating GPG key):
... |
Tell git which key to use:
$ git config --global user.signingkey {KEY-ID} |
To sign all commits automatically:
$ git config --global commit.gpgsign true |
To sign all tags automatically:
$ git config --global tag.forceSignAnnotated true |
Add GPG key to GitHub
Print the GPG key:
$ gpg --armor --export {KEY-ID} |
Copy the GPG key, beginning with -----BEGIN PGP PUBLIC KEY BLOCK-----
and ending with -----END PGP PUBLIC KEY BLOCK-----
, and add it to GitHub SSH and GPG keys Settings.