When dealing with multiple git identities it's sometimes useful to perform a custom setup for commit signing, for each repository:
λ gpg --list-keys my@email.com pub dsa3072 2016-06-23 [SC] XXYYZZXXYYZZXXYYZZXXYYZZXXYYZZXXYYZZXXYY uid [ unknown] olistik <my@email.com> sub elg3072 2016-06-23 [E]
It is also possible to extract the the value with a bit of scripting (Ruby in this case):
λ gpg --list-keys --fingerprint --with-colons my@email.com | ruby -e "puts STDIN.read.lines.grep(/^fpr/)[0].match(/^.*:([0-9A-Z]+):.*/)[1]" XXYYZZXXYYZZXXYYZZXXYYZZXXYYZZXXYYZZXXYY
And then update the git settings within the repository's directory:
λ git config user.signingkey XXYYZZ λ git config commit.gpgsign true λ git config user.email "my@email.com" λ git config user.name "olistik"
Here's a convenience script that can be invoked to setup commit signing:
#!/bin/bash set -e GPG_KEY=$(gpg --list-keys --fingerprint --with-colons my@email.com | ruby -e "puts STDIN.read.lines.grep(/^fpr/)[0].match(/^.*:([0-9A-Z]+):.*/)[1]") git config user.signingkey $GPG_KEY git config commit.gpgsign true git config user.email "my@email.com" git config user.name "olistik"
Here are the versions of my environment:
λ ruby -v ruby 2.6.3p62 (2019-04-16 revision 67580) [x86_64-darwin18] λ gpg --version gpg (GnuPG) 2.2.17 λ git --version git version 2.20.1 (Apple Git-117)
Issues when committing
If you encounter the following error after a commit command:
error: gpg failed to sign the data fatal: failed to write commit object
You could try to update the GPG_TTY
environment variable and re-run the commit command:
λ export GPG_TTY=$(tty)
It it succeeds, then you can persist this change by putting this line into your .zshrc
(or .bashrc
according to the shell you are using).
Top comments (0)