无法在GitHub上将我的第二封电子邮件的提交标记为“已验证”。

21

目前,我使用两个电子邮件地址(个人和公司)以及一个SSH密钥登录GitHub。但是我使用相同的GPG密钥进行签名。这两个电子邮件地址在我的GitHub邮箱设置页面中都得到了验证。

对于第一个电子邮件地址(个人),没有任何问题——当我提交时,它会显示为已验证。但是对于第二个电子邮件地址(公司),提交会显示为未验证,并出现以下警告信息:

此签名中的电子邮件与提交者电子邮件不匹配。

$ gpg --list-secret-keys --keyid-format LONG

...
sec   rsa4096/MY_GPG_KEY_ID 2020-05-19 [SC] [expires: 2022-05-19]
...
uid    [ultimate] Furkan (Company key) <second_email@test.com>
uid    [ultimate] Furkan <first_email@test.com>
在存储库中:
$ git log --show-signature

...
gpg: Good signature from "Furkan (Company key) <second_email@test.com>" [ultimate]
gpg:                 aka "Furkan <first_email@test.com>" [ultimate]
Author: MyGitHubNickname <second_email@test.com>
...

本地配置设置:

$ git config --local --list

...
user.name=Furkan
user.email=second_email@test.com

全局配置设置:

$ git config --global --list

...
user.name=MyGitHubNickname
user.email=second_email@test.com
user.signingkey=MY_40_CHARACTER_SIGNING_KEY

但是并没有起作用:

$ git commit -S --amend --reset-author
$ git push --force

我在这个弹出窗口底部看到了MY_GPG_KEY_ID密钥,完全相同。

图片

按照GitHub文档中描述的解决提交签名验证问题在您的GPG密钥中使用已验证的电子邮件地址指南来操作,但仍未解决问题。


在您的GitHub用户设置中 > "SSH和GPG密钥",您是否看到有关该密钥的两个电子邮件地址都列出了? - qitianshi
1
我在GPG密钥中看不到两个电子邮件地址,有两个相同的邮件地址,但它设置为我的主要邮件地址。我导出了我的次要邮件地址的gpg公钥:gpg --output public.pgp --armor --export name@mail 但是GitHub显示:“密钥已存在且公钥已存在”。 - Dentrax
这更像是一个回答而不是一个问题。 ;) - Milad Faridnia
3个回答

28

你之前的所有操作都是正确的,只是缺少最后一步,需要更新GitHub中公钥的副本。

你需要重新生成你的公钥 (gpg --armor --export KEY_ID),然后在你的GitHub用户设置中的“SSH and GPG keys”选项中,删除原始公钥并上传重新生成的公钥。

最终结果应该像这样。使用列表中任何一个地址签名的提交现在将显示为已验证。

具有两个关联电子邮件地址的GPG密钥


6
如果您之前上传了同样的密钥但只有一个地址,GitHub由于某种原因不允许您上传更新后的密钥,除非您先删除原始密钥("密钥已存在"和"公共密钥已存在")。 - qitianshi
“**删除原始密钥**”对我来说解决了这个问题。 - GHOST-34

4
在我的情况下,提交者和作者之间存在差异。GitHub 默认显示作者,但提交者被设置为自动生成的内容。您可以使用 git log --format=full 进行检查。

根据您的git命令,我注意到我的提交使用了一些随机生成的电子邮件作为作者和提交者。在菜单Git->选项中更新我的电子邮件后,现在我能够看到我的提交有验证标志,并且第一次提交时没有要求密码。不知道这是怎么发生的。如果有人知道如何在不需要密码的情况下进行提交验证,请告诉我。 - Pranesh Janarthanan
1
相同。使用 git config user.email 检查当前电子邮件,如果不正确,则使用 git config user.email "newemail@example.com"git config --global user.email "newemail@example.com" 进行设置。 - nicolaus-hee

1
我刚刚发现你也需要知道,如果你在设置中选择了“保持我的电子邮件地址私密”,并且你只使用GPG密钥,它将会一直显示“未验证的提交”,因为你的电子邮件地址从未匹配过。 我花了几天时间头疼地解决这个问题,试图找出答案,搜索论坛和信息。
我猜想,如果你使用了“保持我的电子邮件地址私密”,你需要查看你所获得的“隐藏电子邮件地址”,并将其包含在你的GPG密钥的“电子邮件”中。
没有任何地方提到这一点! (我本来想在评论中添加,但是积分不够,但这是另一个答案!)

我没有尝试在密钥中使用"神秘的电子邮件地址",但我确实使用了git config user.email命令,并且通过这种方式发现了电子邮件不匹配的问题。当我取消勾选"保持我的电子邮件地址私密"选项后,一切突然就正常工作了。 - Jason Oppermann

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接