【问题标题】:gpg: keyblock resource pubring.kbx not found because the repo path is prefixed to the gnupg homegpg:keyblock 资源 pubring.kbx 未找到,因为 repo 路径以 gnupg 主页为前缀
【发布时间】:2018-10-05 08:53:59
【问题描述】:

我曾经让我的提交由 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

注意keyblock资源的路径,由两条路径组成,确实是无效的。

关于我的设置的信息

我的提交是自动签名的,我的设置来自this answer,总而言之:我像平常一样设置 gpg,然后安装 gpg2 并将我的密码短语通过管道传输到 gpg 每次使用 shell 文件。不,我没有让 gpg-agent 来做这个,不过如果你知道怎么做,请回答这个问题:The key whose key-id is in the signature did not sign this commit

我有一个环境变量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

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

相关问题

这个问题与不同的路径非常相似,但没有解决:Git commit signing GPG issue 评论是检查 gitconfig 中的路径,但我认为在任何 gitconfig 中都没有指向 gnupg 目录的路径,而且我认为它不会以 repo 的路径为前缀。我主要有这个~\.gitconfig

[user]
    signingkey = my_key
[commit]
    gpgsign = true
[gpg]
    program = C:\\Users\\username\\gpg-no-tty.sh

在这里也找到了同样问题的人:https://jira.atlassian.com/browse/SRCTREEWIN-8527

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

【问题讨论】:

  • 你解决了吗?
  • @Lisek 不,我还是一点头绪都没有!
  • @Lisek 已解决,请参阅罗斯的回答。
  • 所以你刚刚运行了这个命令,它工作了吗?试过了,还是遇到gpg: keyblock resource '/d/git/storage/C:\Users\user/.repoconfigs\gnupg/pubring.kbx': No such file or directory的问题
  • 就我而言,事实证明使用不同的 git 版本可以解决问题。我有git version 2.19.1,但它不起作用,git version 2.18.0 一切都像一个魅力。

标签: gnupg git gnupg


【解决方案1】:

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

git config --global gpg.program "%PROGRAMFILES(x86)%\GnuPG\bin\gpg.exe"

git config --global gpg.program "C:\Program Files (x86)\GnuPG\bin\gpg.exe"

显然路径取决于您的 gpg 二进制文件所在的位置。一旦我这样做了,它就能够使用我的 GNUPGHOME 环境变量并找到我的系统密钥环用于签名。不过,这将使用 pinentry 提示您输入密钥密码。

我相信这个问题的出现是因为 Git for Windows 附带了一个 gpg 版本,它默认使用它。无论出于何种原因,当它执行命令以签署您的提交时,它似乎将本地 repo 路径作为 gpg 主目录路径的前缀。

希望这会有所帮助

【讨论】:

  • 哦,没错!我仍在使用程序 gpg 而不是 shell 文件中的 "C:\Program Files (x86)\GnuPG\bin\gpg.exe",我使用它来自动通过它传递我的密码(请参阅我链接到的 answer 中的步骤 10,并刚刚更新)。它现在又可以工作了。
  • 就我而言(Windows 10,git version 2.21.0.windows.1),Git 似乎忽略了gpg.program 首选项(尽管git-scm.com/docs/git-config 的文档仍将其列为有效)。强制 Git 使用其他二进制文件的唯一方法是重命名或删除 C:\Program Files\Git\usr\bin\gpg.exe
【解决方案2】:

(请注意,我又遇到了同样的问题,但必须以不同的方式解决它)

你的 gpg 主目录搞砸了,因为它试图找到 pubring.kbx 文件。 gpg 可能会认为它的 homedir 是您执行 gpg 的路径,因此您会看到 repo 路径前缀 - 不,我不知道为什么。

您可以使用 gpg 的 --homedir 选项解决此问题。

  1. 告诉 bash 使用它:在 C:\Users\username\.bash_profile 中,添加 alias gpg="gpg --homedir=/c/Users/username/.gnupg"
  2. 告诉 git 使用它:创建一个文件 C:\Users\username\start-gpg.sh 并放入它 gpg --homedir=/c/Users/s156757/.gnupg "$@"。然后运行 ​​git config --global gpg.program C:\\Users\\username\\start-gpg.sh 告诉 git 使用它。
  3. 重启 bash。

注意:为了测试这个,我使用了 git 自带的 gpg2。这可能是 GNUPGHOME 变量没有做任何事情的原因——我没有单独安装 gnupg。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2015-01-19
    • 2011-06-11
    • 2019-05-06
    • 1970-01-01
    • 2020-03-05
    • 1970-01-01
    • 1970-01-01
    • 2021-02-28
    相关资源
    最近更新 更多