gpg:找不到密钥块资源pubring.kbx,因为回购路径以gnupg主页为前缀

PHP*_*ate 4 git gnupg

我曾经用gpg签名过我的提交,一切都很好,但是我突然收到了以下消息:

gpg: keyblock resource '/c/Users/username/path/to/project/C:\Users\username\.gnupg/pubring.kbx': No such file or directory
gpg: skipped "my_key": No secret key
gpg: signing failed: No secret key
error: gpg failed to sign the data
fatal: failed to write commit object
Run Code Online (Sandbox Code Playgroud)

请注意,关键块资源的路径由两个路径组成,实际上是无效的。

有关我的设置的信息

我的提交已自动签名,我的设置来自于这个答案,总而言之:我像平常一样设置了gpg,然后安装了gpg2并每次使用shell文件将密码短语通过管道传输到gpg中。不,我没有得到gpg-agent来执行此操作,尽管如果您知道该怎么做,请回答以下问题:密钥ID在签名中的密钥未对此提交进行签名

我有一个GNUPGHOME指向的环境变量C:\Users\username\.gnupg。我尝试将其更改为,C:/Users/username/.gnupg但斜杠也更改了错误。我尝试将其更改为,/c/Users/username/.gnupg但错误消息变为

gpg: Fatal: can't create directory '/c/Users/username/path/to/project/C:/Users/username/.gnupg': No such file or directory
Run Code Online (Sandbox Code Playgroud)

我也不知道导致此问题的系统上发生了什么变化。

相关问题

这个问题与不同的路径非常相似,但是没有解决:Git提交签名GPG问题 该评论是检查gitconfig中的路径,但是我在任何gitconfig中都没有指向gnupg目录的路径,并且它不会我认为无论如何都不要以回购路径作为前缀。我主要有这个~\.gitconfig:

[user]
    signingkey = my_key
[commit]
    gpgsign = true
[gpg]
    program = C:\\Users\\username\\gpg-no-tty.sh
Run Code Online (Sandbox Code Playgroud)

在这里还找到了具有相同问题的人:https : //jira.atlassian.com/browse/SRCTREEWIN-8527

从的标签描述中,我无法确定此问题是属于此问题还是属于超级用户,因为我不确定这是程序性还是直接使用(两者都是?)。

小智 6

我遇到过同样的问题。要修复它,我只需要在.gitconfig文件中指定gpg.program变量即可指向我的Gpg4win安装,如下所示:

git config --global gpg.program "%PROGRAMFILES(x86)%\GnuPG\bin\gpg.exe"
Run Code Online (Sandbox Code Playgroud)

要么

git config --global gpg.program "C:\Program Files (x86)\GnuPG\bin\gpg.exe"
Run Code Online (Sandbox Code Playgroud)

显然,该路径取决于您的gpg二进制文件所在的位置。完成此操作后,它便可以使用我的GNUPGHOME环境变量,并找到用于签名的系统密钥环。但是,这将使用pinentry提示您输入密钥密码。

我相信会出现此问题,因为Windows的Git附带了默认使用的gpg版本。无论出于何种原因,在执行命令对提交进行签名时,似乎本地存储库路径都将前缀到gpg主目录路径。

希望这会有所帮助