I just started using git and I install git and gpg via homebrew.
For some reason, I get this error when i do git commit
I looked at so many other stackoverflow
I experienced this problem after upgrading to gnupg 2.x. It would seen that gpg2 is referencing keys differently: I still had signingkey = ABC98F11
(gpg v1 setting) in my ~/.gitconfig
. The key identifiers for gpg2 are longer. Look them up with gpg --list-secret-keys
If you had your pinentry and gpg setup up before, and it stopped working out of nowhere:
Check if your gpg works:
echo "test" | gpg --clearsign
If it says gpg: signing failed: No pinentry
,
just restart the gpg daemon client, which gets stuck from time to time:
gpgconf --kill gpg-agent
Now it should be working:
echo "test" | gpg --clearsign
This will help you to get rid of it
git config commit.gpgsign false
For troubleshooting, two things to first try:
git config --global gpg.program gpg2
, to make sure git uses gpg2
and not gpg
echo "test" | gpg2 --clearsign
, to make sure gpg2
itself is workingIf that all looks all right, one next thing to try:
brew install pinentry
to ensure you have a good tool installed for passphrase entryIf after that install and you re-try git commit
and still get the "failed to sign the data
" error:
gpgconf --kill gpg-agent
to kill any running agent that might be hungIf that says gpgconf
isn’t installed or doesn’t have a --kill
option, you might try this:
cp ~/.gnupg ~/.gnupg-GOOD
to save a copy of your ~/.gnupg
to revert to later if neededbrew install gnupg21
to install GnuPG 2.1The reason for saving a copy of your ~/.gnupg
dir is that GnuPG 2.1 potentially creates/changes some key data in way that isn’t backward-compatible with GnuPG 2.0 and earlier, so if you want to go back later, you can do mv ~/.gnupg ~/.gnupg21 && mv ~/.gnupg-GOOD ~/.gnupg
.
Otherwise there are some basic steps to run to check you’ve got a working GnuPG environment:
gpg2 -K --keyid-format SHORT
, to check that you have at least one key pairIf the output of that shows you have no secret key for GnuPG to use, then you need to create one:
gpg2 --gen-key
, to have GnuPG walk you through the steps for creating a key pairIf you get an error message saying “Inappropriate ioctl for device”, do this:
export GPG_TTY=$(tty)
and/or add that to your ~/.bashrc
or ˜/.bash_profile
I had this issue just now when VSCode updated. I figured the GPG agent was hanging, as the command took a good few seconds to run before erroring out. Running gpgconf --kill gpg-agent
reset that and fixed it for me.
For me this error started to occur with git tag -s
on Debian GNU/Linux when I switched from pinentry-gnome3
to pinentry-curses
(using update-alternatives --config pinentry
) for easier remote access. It only occurred with git tag -s
, not with gpg
(e.g. gpg --clearsign
) itself.
The sole change necessary to get it working again in this case was to add export GPG_TTY=$(tty)
to my shell startup files.
I though didn't get the “Inappropriate ioctl for device” error message mentioned as indicator for this fix in another answer to this question.
Note: Since the cause for getting this error was a completely different one than for those who suggested export GPG_TTY=$(tty)
before (usually as a side hint) in other answers to this question, I decided this question needs another answer which mentions that export GPG_TTY=$(tty)
may be the main fix and sole thing necessary in some cases.