I followed few articles over the pretty attributes on Git 2.10 release note. Going through which upgraded the git to 2.10.0 and made changes to global .gitconfig
resulting as follows -
[filter "lfs"]
clean = git-lfs clean %f
smudge = git-lfs smudge %f
required = true
[user]
name = xyz
email = abc.def@gmail.com
signingkey = AAAAAAA
[core]
excludesfile = /Users/xyz/.gitignore_global
editor = 'subl' --wait
[difftool "sourcetree"]
cmd = opendiff \"$LOCAL\" \"$REMOTE\"
path =
[mergetool "sourcetree"]
cmd = /Applications/SourceTree.app/Contents/Resources/opendiff-w.sh \"$LOCAL\" \"$REMOTE\" -ancestor \"$BASE\" -merge \"$MERGED\"
trustExitCode = true
[alias]
lg = log --graph --pretty=format:'%Cred%h%Creset -%C(yellow)%d%Creset %s %Cgreen(%cr) %C(bold blue)<%an>%Creset' --abbrev-commit --date=relative
[color "diff"]
old = red strike
new = green italic
But now that I try to sign my commits using
git commit -a -S -m "message"
I get to see the following error -
You need a passphrase to unlock the secret key for
user: "XYZ (Digitally Signed) "
2048-bit RSA key, ID AAAAAAAA, created 2016-07-01
error: gpg failed to sign the data fatal: failed to write commit object
Note - I can still commit changes using git commit -a -m "message"
Is there a way to overcome the same? Or any change required in gpg
configs to get along with the upgradation of git?
Update 1
Also seeking further usefulness, following Is there a way to "autosign" commits in Git with a GPG key?. I've already configured the key using
git config --global user.signingkey ED5CDE14(with my key)
git config --global commit.gpgsign true
and quite obviously getting the same error anyway.
I tried quite a few suggestions but no luck, and ended up with this. I know this is not perfect, but I just wanna get back to my work asap.
If gnupg2 and gpg-agent 2.x are used, be sure to set the environment variable
GPG_TTY
.See GPG’s documentation about common problems.
May help killing process
gpg-agent
that might stuck with old data. So newgpg-agent
started would ask for passwordNone of the above answers seemed to match my problem. My
gpg
binary (/usr/local/bin/gpg -> /usr/local/MacGPG2/bin/gpg2
) was installed as part of GPG Suite, rather than by brew.Nevertheless, I felt that the advice boiled down to: "use whichever
gpg
binary is the latest available on brew". So I tried:I verified that I had correctly changed the
gpg
upon my$PATH
to point to the new executable from brew:My two cents here:
When you create and add a key to gpg-agent you define something called
passphrase
. Now thatpassphrase
at some point expires, andgpg
needs you to enter it again to unlock your key so that you can start signing again.When you use any other program that interfaces with
gpg
,gpg
's prompt to you to enter your passphrase does not appear (basicallygpg-agent
when daemonized cannot possibly show you the input dialog instdin
).One of the solutions is
gpg --sign a_file.txt
then enter the passphrase that you have entered when you created your key and then everything should be fine (gpg-agent
should automatically sign)See this answer on how to set longer timeouts for your passphrase so that you do not have to do this all the time.
Or you can completely remove the passphrase with
ssh-keygen -p
The answers above are great but they did not work for me. What solved my issue was exporting both the public and secret keys.
list the keys from machine where we are exporting from
export the keys
go to machine we are importing to and import
bingo bongo, you're done!
reference: https://www.debuntu.org/how-to-importexport-gpg-key-pair/
ps. My keys were originally made on bootcamp windows 7 and I exported them onto my mac air (same physical machine, different virtually)