Git commit PGP signing
Git signed commits help verify the Git author’s identity using PGP. Optionally, a user or organization can set rules requiring Git PGP signed commits on Git hosting providers such as GitHub and GitLab
PGP public keys can help verify author identity of Git commits, social media, website, etc. Setup GPG on the laptop:
- Linux:
apt install gnupg - macOS:
brew install gnupg - Windows:
winget install gnupg.Gpg4win
Generate a GPG keypair if one doesn’t already exist for yourself.
Export the GPG public and private key and import into GPG:
gpg --full-generate-key
gpg --armor --export-secret-keys > private_key.asc
gpg --armor --export > public_key.ascVerify PGP key:
gpg --list-secret-keys --keyid-format LONGThe first lines will be like:
sec rsa4096/<public_hex>
The hexadecimal part after the / is a public reference to the GPG keypair.
Add Git provider such as GitHub or GitLab verified email address to the PGP key. To make commits “Verified” with the Git provider, at least one of the Git provider verified email addresses must match:
git config --get user.emailUse the GPG public ID below:
gpg --edit-key <public_hex>In the interactive GPG session that launches, type
adduid
and enter Name and the Email address–which must exactly match the GitHub verified email address.
I also add the @users.noreply.github.com fake email that I always use to avoid spam.
Do adduid twice–once for the real
GitHub verified email address
and again for the github_username@users.noreply.github.com fake email.
Add “trust” from the GPG> prompt:
trust
Since it’s you, perhaps a trust level of 5 is appropriate.
type
save
to save changes, which may not show up until exiting and reentering the GPG> prompt.
Configure Git to use the GPG public hex ID like:
git config --global user.signingkey <public_hex>
git config --global commit.gpgsign trueAdd the GPG public key to the Git provider. Copy and paste the output from this command into GPG Key of GitHub or GitLab. This is done only once per human, not once per device.
gpg --armor --export <public_hex>Windows
On Windows, additionally do
git config --global gpg.program "$Env:ProgramFiles (x86)\GnuPG\bin\gpg.exe"macOS
On macOS, additionally do
brew install pinentry-macand add to ~/.zshrc:
export GPG_TTY=$TTYUsage
GPG can be used to sign Git commits and tags, and can also be disabled per commit.
Verify Git PGP commit sign
Make a git commit after the procedure above, and see the signature notes:
git log --show-signatureit will start with
gpg: Signature made
Temporary disable Git commit sign
If you temporarily lose access to the GPG password, you won’t be able to git commit.
A temporary workaround is to set
git config commit.gpgsign falseor simply add the --no-gpg-sign option like:
git commit -am "msg" --no-gpg-signIf not signing as default, sign only certain commits by
git commit -SNote that’s a capital “S”.