我参考了几篇关于Git 2.10发行说明中的漂亮属性的文章。将git升级到2.10.0,并对全局的.gitconfig进行了更改,结果如下-

[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

但是现在我尝试使用

git commit -a -S -m "message"

我看到下面的错误-

你需要一个密码来解锁秘钥 用户:“XYZ(数字签名)” 2048-bit RSA key, ID AAAAAAAA, created 2016-07-01 错误:GPG数据签名失败致命:写提交失败 对象

注意-我仍然可以使用git commit -a -m "message"来提交更改

有办法克服同样的问题吗?或者在gpg配置中需要做任何改变以适应git的升级?


更新1

还寻求进一步的有用性,以下是是否有一种方法在Git中使用GPG密钥“自动签名”提交?我已经配置了密钥使用

git config --global user.signingkey ED5CDE14(with my key) 
git config --global commit.gpgsign true

很明显得到了相同的错误。


当前回答

在prezto的另一个zsh变体中遇到了这个。那里的问题是我的git回购是新的,没有node_modules添加到.gitignore。当我将node_modules添加到.gitignore时,问题就没有了。所以我的假设是git-info由于这些大的node_module而花费时间。

其他回答

按照下面的url设置签名提交 https://help.github.com/en/articles/telling-git-about-your-signing-key

如果还在 GPG签署数据失败致命: 日志含义写提交对象失败

这不是git的问题,而是GPG的问题 遵循以下步骤

gpg——版本 回显"test" | GPG—clearsign

如果显示:

gpg: signing failed: Inappropriate ioctl for device
gpg: [stdin]: clear-sign failed: Inappropriate ioctl for device

然后使用export GPG_TTY=$(tty) 然后再次尝试echo“test”| GPG—clearsign 得到PGP签名。 Git config -l | grep GPG

gpg.program=gpg
commit.gpgsign=true

应用git commit -m "commitMsz"

在OS X上,通过brew使用gnupg2,我只需要杀死gpg代理,有时会发生:

pkill -9 gpg-agent

如果需要,设置env变量:

export GPG_TTY=$(tty)

参见常见的GPG问题和答案。

我在Ubuntu 18.04上得到这个错误,原来我的密钥过期了。

为了看到这个,我运行了这个,它确认我的密钥过期了:

gpg --list-keys

为了纠正这个错误,我运行(使用之前命令中显示的ID):

gpg --edit-key <ID>

从那里,我延长了键0和键1的过期时间,遵循这些指令,最后输入键0,然后过期,并按照提示进行操作。然后重复键1。

之后,为了测试这一点,我运行:

echo test | gpg --clearsign

在修复之前,它失败了,错误如下:

gpg: no default secret key:无默认密钥 gpg: [stdin]: clear-sign failed: No secret key

但是在修复之后,相同的命令成功地对消息进行了签名,所以我知道事情又开始工作了!

我一定是不小心更新了gpg,因为我在尝试测试gpg是否工作后得到了这个:

gpg: WARNING: server 'gpg-agent' is older than us (2.1.21 < 2.2.10)
gpg: Note: Outdated servers may lack important security fixes.
gpg: Note: Use the command "gpgconf --kill all" to restart them.

运行gpgconf—kill all为我解决了这个问题。

我在Ubuntu 18.04上得到了同样的错误,也担心了几个星期。 最后意识到gpg2没有指向任何东西。 所以简单地运行

git config --global gpg.program gpg

然后,它就像魅力一样。

您的提交现在将带有验证标记。