12

I am having trouble signing commits. With the following git config:

user.name=Bob
user.email=[bob's email]
user.signingkey=ABCDEFGH
user.user=bob1
gpg.program=gpg2

I was told to include only the first eight characters of the secret key.

After staging, upon git commit -S -m "commit message", I receive the following errors:

error: gpg failed to sign the data
fatal: failed to write commit object

It seems that most users who encounter this error are on Macs and have some extra setup to do. But I'm on Kali Linux.

Any advice?

2

3 Answers 3

25

I was told to include only the first eight characters of the secret key.

The value of user.signingkey is a key id identifying which key git should use when generating the signature.

There's a complete example in the official documentation that shows how this should work. If gpg --list-keys shows something like:

/Users/schacon/.gnupg/pubring.gpg
---------------------------------
pub   2048R/0A46826A 2014-06-04
uid                  Scott Chacon (Git signing key) <[email protected]>
sub   2048R/874529A9 2014-06-04

Then the key id is 0A46826A:

git config --global user.signingkey 0A46826A
Sign up to request clarification or add additional context in comments.

3 Comments

Thanks, this helped. I misunderstood the key length. I was providing the first 8 because 2048R uses eight, while RSA4096 outputs a longer key. After cleaning the git config and setting the values with --global (specifying the full key), it worked!
One of the missing nail. The other one, is the email associated with the gpg key should be verified by github. Go to your github profile and add this new email into your github profile, after which, github will send you a verification email and when you click the button from that email then your gpg key shall then be marked as verified. At first, I thought that doing a signed commit push to one of my repo will verify my gpg key but it didn't. Secondly, I also thought that publishing my gpg key to keyserver.ubuntu.com will verify my gpg key, but it didn't.
This is the only one that helps for me. I am using macOS with gpg2 and pinentry-mac.
13

Had the same problem using WSL (Ubuntu). Working solution for me was adding export GPG_TTY=$(tty) into ~/.bashrc, thanks to this answer.

1 Comment

when i checked in bitbucket doc, it says to enter in .zshrc file so i installed zsh shell in linux but then it only worked in .bashrc. why it is so?
4

For those who followed the answer but could not make it work. There is a chance that you had tried other solutions and accidentally did this (which is for MacOSX, not Linux)

git config --global gpg.program=gpg2

You should only do that if you are using MacOSX. For Linux, you can fix it by unset-ing that entry first by running this command (because your system uses gpg NOT gpg2).

git config --global --unset gpg.program

Now you can follow the accepted answer in this page to tell Git to use your key.

1 Comment

git config --global --unset gpg.program helped me, thanks!

Your Answer

By clicking “Post Your Answer”, you agree to our terms of service and acknowledge you have read our privacy policy.

Start asking to get answers

Find the answer to your question by asking.

Ask question

Explore related questions

See similar questions with these tags.