git commit签名失败:密钥不可用

Emi*_*dez 64 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
Run Code Online (Sandbox Code Playgroud)

我已经生成了一个如下所示的新密钥,但它仍然会产生相同的错误

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
Run Code Online (Sandbox Code Playgroud)

密钥与上述相同

我发现这 为git标记生成一个GPG密钥并按照步骤但它仍然不起作用,任何想法?

小智 63

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

git config user.signingkey 35F5FFB2
Run Code Online (Sandbox Code Playgroud)

如果要为每个存储库使用相同的密钥,请在全局声明它.

git config --global user.signingkey 35F5FFB2
Run Code Online (Sandbox Code Playgroud)

资料来源:https://git-scm.com/book/en/v2/Git-Tools-Signing-Your-Work

  • 我必须和`git config --global gpg.program gpg2`一起做这个. (2认同)

pau*_*del 53

对我有用的是补充

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

如果要查找gpg2.exe的完整路径:

where gpg2.exe
Run Code Online (Sandbox Code Playgroud)

  • 根据安装的GnuPG版本,您需要对`gpg.exe`而不是`gpg2.exe`执行此操作。 (2认同)

Wak*_*eel 46

这在Windows 10上适用于我

__CODE__

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

__CODE__

  • 是的,这很重要,因为 git 有自己的 gpg,大多数人会为 Windows 安装 gpg 并通过 kleopatra 导入私钥,并且只有“主”gpg 知道关键位置。很好的答案 (8认同)
  • 这也对我有用,谢谢! (5认同)
  • 使用 VS Code 出现此错误“密钥不可用”并设置“gpg.exe”位置解决了它。 (3认同)
  • 这对我也有用。特别是在遵循 [github](https://help.github.com/en/articles/generate-a-new-gpg-key) 本身的配置步骤之后。 (2认同)

alp*_*yax 12

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

这些例子使用了--global标志,但如果你想在本地使用这些东西,你可以删除它.

在git中配置密钥

git config --global user.signingkey 35F5FFB2
Run Code Online (Sandbox Code Playgroud)

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

有些系统(Ubuntu的用于为例),可以gpggpg2在同一时间.您需要指定您将使用gpg2

git config --global gpg.program gpg2
Run Code Online (Sandbox Code Playgroud)

导出GPG_TTY(可选)

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

export GPG_TTY=$(tty)
Run Code Online (Sandbox Code Playgroud)

自动启用GPG演唱(可选)

git config --global commit.gpgsign true
Run Code Online (Sandbox Code Playgroud)


Ant*_*ida 12

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

所以,总结一下;

  • 不需要 kleopatra,使用 GIT 默认值代替。

  • 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"
    
    Run Code Online (Sandbox Code Playgroud)


wil*_*824 8

我遇到过在 Windows 10 机器上发生同样的情况。

$ 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
Run Code Online (Sandbox Code Playgroud)

命令"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
Run Code Online (Sandbox Code Playgroud)

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

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

我希望这可以帮助任何偶然发现此消息的人,而之前的答案并未解决该问题。


Cod*_*ard 6

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

# On unix add it to your path

# On windows it will usually be under: 
<drive>:\Users\<username>\AppData\Roaming\gnupg
Run Code Online (Sandbox Code Playgroud)

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

System Variable
  Name: GNUPGHOME
  Path: <drive>:\Users\<username>\AppData\Roaming\gnupg
Run Code Online (Sandbox Code Playgroud)

  • 对我来说这不是“GNUPGHOME”。使用“GPGHOME”它对我有用 (2认同)

rbe*_*nto 5

我最近发现了同样的secret key not available错误,并且在此过程中还发现了更多错误,例如未找到 GPG 代理。

就我而言,我希望提交签名并在 GitHub 上显示为已验证。

以下是使其在 Windows 10 x64 上运行的完整步骤:

安装 GPG

winget像这样安装了 GPG 2.3.1 :

C:\> winget install GnuPG.GnuPG
Run Code Online (Sandbox Code Playgroud)

验证它:

C:\> gpg --version
Run Code Online (Sandbox Code Playgroud)

生成 GPG 密钥

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

  • 密钥必须至少为 4096 位。

以 ASCII 盔甲格式导出密钥

首先列出密钥:

C:\> gpg --list-secret-keys --keyid-format=long
Run Code Online (Sandbox Code Playgroud)

秒 rsa4096/ [快捷键] 2021-06-14 [SC]

然后导出:

C:\> gpg --armor --export [short-key]
Run Code Online (Sandbox Code Playgroud)

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

-----BEGIN PGP PUBLIC KEY BLOCK-----
[huge-ascii-key]
-----END PGP PUBLIC KEY BLOCK-----
Run Code Online (Sandbox Code Playgroud)

将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"
Run Code Online (Sandbox Code Playgroud)

为 GPG 代理设置 GPG 环境变量

检查 GPG 代理:

gpg-agent --version
Run Code Online (Sandbox Code Playgroud)

设置环境变量:

GNUPGHOME=%USERPROFILE%\AppData\Roaming\gnupg
Run Code Online (Sandbox Code Playgroud)

完毕

结果.gitconfig将有像这样的用户部分:

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

  • 谢谢,这真的很有帮助,应该选择它作为最佳答案 (3认同)
  • 在重用 PATH 中声明的“C:\Program Files\Git\usr\bin\gpg.exe”后,它解决了我的问题。 (3认同)
  • 对我来说,唯一缺少的是设置 GNUPGHOME 环境变量,我必须将其设置为“%USERPROFILE%\.gnupg”,因为这是默认安装的位置。我使用默认的 3072 字节而不是 4096 创建了密钥,并且效果很好。 (2认同)

Ehs*_*jad 5

以下步骤帮助我解决了这个问题:

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

git config --global --unset gpg.format

gpg --list-secret-keys --keyid-format=long
// this will list the keys and copy the Key-ID
Run Code Online (Sandbox Code Playgroud)

在此输入图像描述

复制第一行中突出显示的键并在下一个查询中使用Key-ID

git config --global user.signingkey <Key-ID>

git config --global commit.gpgsign true
Run Code Online (Sandbox Code Playgroud)