Git 提交签名失败: 密钥不可用

我在尝试使用 Git 提交时遇到了这个错误。

gpg: skipped "name <name@mail.com>": secret key not available
gpg: signing failed: secret key not available
error: gpg failed to sign the data
fatal: failed to write commit object

我已经生成了一个新的关键字,如下所示,但它仍然给出相同的错误

gpg --list-keys
~/.gnupg/pubring.gpg
--------------------------------
pub   2048R/35F5FFB2 2016-04-23
uid                  name (New key) <name@mail.com>
sub   2048R/112A8C2D 2016-04-23

密钥和上面的一样

我找到了这个 为 git 标记生成一个 GPG 密钥并按照步骤执行,但是仍然不能工作,有什么想法吗?

89595 次浏览

您必须设置变量 GNUPGHOME。 没有它,GnuPG 就无法找到您的密钥。

# On unix add it to your path


# On windows it will usually be under:
<drive>:\Users\<username>\AppData\Roaming\gnupg

在 Unix 上,它只是简单地将它添加到路径中。
在 Windows 上,必须打开控制面板并将其设置为

System Variable
Name: GNUPGHOME
Path: <drive>:\Users\<username>\AppData\Roaming\gnupg

您需要在使用密钥之前配置它。

git config user.signingkey 35F5FFB2

或者,如果希望对每个存储库使用相同的密钥,可以在全局范围内声明它。

git config --global user.signingkey 35F5FFB2

资料来源: Git Tools-为你的作品签名

也许您需要克隆自己拥有权限的存储库。当我克隆另一个人的存储库时,我遇到了这个问题。

对我有用的是

git config --global gpg.program "C:/Program Files (x86)/GNU/GnuPG/gpg2.exe"

如果你想找到 gpg2.exe 的完整路径:

where gpg2.exe

我想完成所有这些答案,因为我有很多问题。

这些示例使用 --global标志,但是如果希望在本地执行这些操作,可以删除它。

在 git 中配置秘密密钥

git config --global user.signingkey 35F5FFB2

配置在 git 中使用的 gpg 程序(可选)

有些系统(例如 Ubuntu)可以同时拥有 gpggpg2。您需要指定使用 gpg2

git config --global gpg.program gpg2

导出 GPG _ TTY (可选)

如果在 ssh 环境中使用这些命令,可能会出现以下错误: Inappropriate ioctl for devicegpg: échec de la signature : Ioctl() inapproprié pour un périphérique。这可以通过以下方式解决:

export GPG_TTY=$(tty)

自动启用 GPG 唱歌(可选)

git config --global commit.gpgsign true

这在 Windows 10上对我很有用(注意,我使用的是 gpg.exe 的绝对路径) :

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

这是我在修复之前得到的错误:

gpg: skipped "3E81C*******": secret key not available
gpg: signing failed: secret key not available
error: gpg failed to sign the data
fatal: failed to write commit object

我也遇到过同样的问题,就是那家 姓名和电子邮件店。Gitconfig 是不一样的来自所提供的 gpg 键。我改变了他们,以便匹配,它开始工作。

我曾经遇到过这样的情况,在 Windows10机器上我也遇到过同样的情况。

$ git commit -m "Improve logging, imports and show time executed"
gpg: signing failed: Operation cancelled
gpg: signing failed: Operation cancelled
error: gpg failed to sign the data
fatal: failed to write commit object

命令 "C:\Program Files (x86)\GnuPG\bin\gpg.exe" --list-secret-keys --keyid-format LONGgpg --list-secret-keys --keyid-format LONG在哪里给我完全不同的结果!

$ where gpg
C:\Program Files\Git\usr\bin\gpg.exe
C:\Program Files (x86)\GnuPG\bin\gpg.exe

主要原因与之前的答案有关,但是意义不同:

  • 我正在使用 git (配置路径)版本创建 gpg 键 GPG
  • Git 被配置为使用下载的 gpg 版本 承诺。
  • 似乎 GPG 实现使用自己的证书数据库和存储。

我希望这可以帮助任何人,无意中发现这个信息和以前的答案不解决其他问题。

使用 "C:\Program Files\Git\usr\bin\gpg.exe"是我的解决方案。
不得不卸载克利奥帕特拉。有了它,它不工作。

总结一下

  • 不需要 kleopatra,使用 GIT default 代替。

  • git config --global user.signingkey Y0URK3Y
    git config --global commit.gpgsign true
    git config --global gpg.program "C:\Program Files\Git\usr\bin\gpg.exe"
    

我最近发现了相同的 secret key not available错误和一些其他的错误,比如 GPG 代理没有找到。

在我的例子中,我希望在 GitHub 上签名并显示已验证的提交。

下面是让它在 Windows10x64上工作的完整步骤:

安装 GPG

我用 winget安装了 GPG 2.3.1,如下所示:

C:\> winget install GnuPG.GnuPG

核实:

C:\> gpg --version

生成 GPG 密钥

C:\> gpg --full-generate-key
  • 添加您的真实姓名和电子邮件,与 GitHub 帐户中使用的相同。

  • 密钥必须至少是4096位。

以 ASCII 装甲格式导出密钥

首先列出关键:

C:\> gpg --list-secret-keys --keyid-format=long

Sec rsa4096/[短键]2021-06-14[ SC ]

然后输出它:

C:\> gpg --armor --export [short-key]

复制包含 BEGIN/END 文本的密钥。

-----BEGIN PGP PUBLIC KEY BLOCK-----
[huge-ascii-key]
-----END PGP PUBLIC KEY BLOCK-----

将 GPG 盔甲 ASCII 键添加到 GitHub 帐户

转到 Profile > Settings > SSH and GPG keys > New GPG key

或者请跟随这些 视觉指令

默认情况下,将 Git 配置为对所有提交进行签名

C:\> git config --global user.signingkey [short-key]
C:\> git config --global commit.gpgsign true
C:\> git config --global gpg.program "C:/Program Files (x86)/gnupg/bin/gpg"

为 gPG 代理设置 gPG 环境变量

检查 GPG 代理:

gpg-agent --version

设定环境变量:

GNUPGHOME=%USERPROFILE%\AppData\Roaming\gnupg

成交

产生的 .gitconfig的用户部分如下:

[user]
name = Your Name
email = your@email.com
signingkey = [short-key]
[commit]
gpgsign = true
[gpg]
program = C:/Program Files (x86)/gnupg/bin/gpg

视窗11上,按照以下方式设置 gpg.program,即使可执行文件存在于该位置,对我来说也不起作用。

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

我不得不设定如下:

git config --global gpg.program gpg

我在 VS 代码中得到了这个错误。我在 Bash中运行以下命令

git config --global commit.gpgsign false

然后,按下 Ctrl+,并打开您的设置。取消选中“启用提交签名”在工作区设置,如果它是启用的。

enter image description here

现在打开 VS 代码终端并执行以下命令

enter image description here

如果需要,关闭并重新打开 VS 代码。现在应该可以工作了。