git - gpg onto mac osx: error: gpg failed to sign the data
GitMacosGnupgGit Problem Overview
I installed GPG from brew.
brew install gpg
It is gnupg2-2.0.30_2.
When I commit, I do get a error message:
You need a passphrase to unlock the secret key for
user: "Max Mustermann (mycomment) <[email protected]>"
2048-bit RSA key, ID 1111AAAA, created 2017-01-05
error: gpg failed to sign the data
fatal: failed to write commit object
I used the command:
gpg --list-secret-keys | grep ^sec
and it gives me back:
sec 2048R/1111AAAA 2017-01-05
Then I used this command:
git config --global user.signingkey 1111AAAA
commit gives me back the same error message.
How can I solve this problem?
Git Solutions
Solution 1 - Git
If you’re not getting prompted at all for a passphrase, the solution may just be to install a program to facilitate that. The most common is pinentry.
brew install pinentry-mac
So installing that and trying again may get things working. But if not, another thing to do is make sure git
it using/finding the right GPG program. These days you really should be using gpg2
, so if you don’t already have that installed, do this:
gpg --version
…and make sure it indicates you have GnuPG version 2+ (not version 1) installed.
If you already have GnuPG 2+ and pinentry
installed, then try this:
echo "pinentry-program /usr/local/bin/pinentry-mac" >> ~/.gnupg/gpg-agent.conf
…or, more robustly:
echo "pinentry-program $(which pinentry-mac)" >> ~/.gnupg/gpg-agent.conf
…and then try again.
And you may also need to stop gpg-agent
:
gpgconf --kill gpg-agent
You don’t need to manually restart it — it will get restarted automatically when it’s needed.
Note: Some commenters mention needing to reboot after making changes — but it seems likely the only effect of that is to cause gpg-agent
to be restarted. So manually killing gpg-agent
as described above should be sufficient.
Solution 2 - Git
To anybody who is facing this issue on MacOS machines, try this:
brew uninstall gpg
brew install gpg2
brew install pinentry-mac
(if needed)gpg --full-generate-key
Create a key by using an algorithm.- Get generated key by executing:
gpg --list-keys
- Set the key here
git config --global user.signingkey <Key from your list>
git config --global gpg.program /usr/local/bin/gpg
git config --global commit.gpgsign true
- If you want to export your Key to GitHub then:
gpg --armor --export <key>
and add this key to GitHub at GPG keys: https://github.com/settings/keys (with START and END line included)
If the issue still exists:
test -r ~/.bash_profile && echo 'export GPG_TTY=$(tty)' >> ~/.bash_profile
echo 'export GPG_TTY=$(tty)' >> ~/.profile
If the issue still exists:
Install https://gpgtools.org and sign the key that you used by pressing Sign from the menu bar: Key->Sign
If the issue still exists:
Go to: your global .gitconfig
file which in my case is at: /Users/gent/.gitconfig
And modify the .gitconfig file (please make sure Email and Name are the same with the one that you have created while generating the Key):
[user]
email = [email protected]
name = Gent
signingkey = <YOURKEY>
[gpg]
program = /usr/local/bin/gpg
[commit]
gpsign = true
gpgsign = true
[filter "lfs"]
process = git-lfs filter-process
required = true
clean = git-lfs clean -- %f
smudge = git-lfs smudge -- %f
[credential]
helper = osxkeychain
p.s I took this answer from my previous answer here: https://stackoverflow.com/questions/39494631/gpg-failed-to-sign-the-data-fatal-failed-to-write-commit-object-git-2-10-0/55646458#55646458
Solution 3 - Git
I had the same error message and found that my key was expired. So it might be a good idea to check your key expiration with:
gpg --list-keys
If your key is expired as well you can adjust the expiration date with:
gpg --edit-key <YOUR_KEY>
and then:
gpg> expire
...enter the new expiration date...
gpg> save
Solution 4 - Git
I ran brew upgrade
on macOS and it broke my gpg signing in git, presumably when it updated the gpg package. I assume there's an easier way to force the gpg service to restart correctly (I assume something that was actively running broke when I upgraded the package), but my fix for this was pretty simple: Just restart your computer.
Solution 5 - Git
Solution 6 - Git
If you are still getting problems in macOS,
open ~/.gitconfig
and change anything below [gpg]
to
program = /usr/local/bin/gpg