error: gpg failed to sign the data fatal: failed to write commit object
Curiously, many had similar problem, but not from Emacs which is my case. On other hand, git signing from terminal worked without any problems for me.
Further digging, mostly by trying to run manually git command with various options from minibuffer (running git in eshell, shell or ansi-shell didn't reproduce above error), I managed to get this behavior. Interestingly, gpg will always use TTY (terminal), even for output.
Solution is to use
–no-tty with gpg/gpg2 commands. Sadly, git doesn't allow command line options in gpg configuration section, so this will not work:
[gpg] program = gpg2 --no-tty
However, adding the following line in gpg configuration (
$HOME/.gnupg/gpg.conf) will solve the problem:
# disable tty output by default no-tty
In case you are running
gpg-agent, reload it with:
$ gpg-connect-agent reloadagent /bye