为什么 GitHub 的提交记录没有显示“已验证”(签名提交)?

5

我已经通过设置 GPG 密钥将本地仓库中的 Git 提交显示为 "已验证",但为什么在 GitHub 上提交时(我正在 GitHub 上),我的提交不会显示为 "已验证"?它没有显示任何内容,表明 GitHub 将其视为未经验证的提交。这是预期的吗?还是我需要在 GitHub 上配置一些东西?

谢谢。


是的,我做了。否则,本地提交在 GitHub 上不会显示为“已验证”,对吧? - pdn2020
3个回答

4
在2020年秋季的某个时间点,可能是10月1日至20日之间,GitHub改变了他们处理GPG密钥提交验证rebase的方式,其中仅更改了git COMMITTER_DATE
因此,以下是我的正常用例流程:
  1. 我发现一个未发布功能的提交中存在一个非常小的问题。
  2. 我将其提交,然后rebase掉短暂的修复提交。
  3. 由于已经过去了一天以上,GitHub会将我对原始文件的活动报告为今天发生的。
  4. 我通过执行git rebase --committer-date-is-author-date <HASH>来解决这个问题,这将重置GitHub文件修改日期为提交的日期时间,而不是今天/现在。
在10月20日之前,我从未在执行这些步骤时遇到过任何问题,已经有超过8年的时间了。
现在,突然间,GitHub正在显示所有涉及此rebase的提交都未经验证。

enter image description here

您可以在https://github.com/hopeseekr/BashScripts/commits/fucked_up_gpg_verifications上自行查看。

报告的错误是什么?“没有用户与提交者电子邮件相关联。”这显然是荒谬的,因为所有提交都共享相同的电子邮件地址,并且它是该帐户上的主要地址。


3

你无法对通过GitHub网页界面创建的提交/标签进行签名。只有本地提交/标签可以被签名。

这是因为签名密钥由两部分组成——公钥和私钥。私钥绝不能离开你的计算机。

公钥可以加密数据,私钥可以解密数据,这样只有你才能读取加密数据。私钥可以签署数据,公钥验证签名,这样只有你才能使用你的密钥进行签署,但任何人都可以验证你的签名。

当你上传GPG密钥到GitHub时,你只上传公钥,因此GitHub只能验证已签名的提交/标签,但不能对它们进行签名。


那很有道理。谢谢博士! - pdn2020
所以,我认为在 GitHub Pull Request 代码审查过程中,通过本地 Git 进行提交是一个好的实践。这样,所有我的提交都会得到验证。当然,如果更新只是一个简单的更改,通过 GitHub 进行代码更新很容易和快捷,但我会抵制这种诱惑 :) - pdn2020
@pdn2020 我不使用带签名的提交 - 每次输入密码太麻烦了(是的,我使用 gpg-agent 但超时时间很短 - 15分钟)。我只使用带签名的标签,这样我可以通过Web界面接受合并请求,而且我不必担心合并的签名问题。 - phd
我还有一个问题。我从主分支fork了一个名为fb的分支,在本地进行了更新,将其推送到github,并提交了一个pull request(用于代码审查)。另一位同事也提交了另一个PR,经过批准后将其分支合并到了稳定版(新的主分支)。我的PR也有几个提交(用于代码审查),是在github上完成的(而不是在本地git上)。由于我是fork的,所以本地只有一个分支,这就是我提交的pull request。什么是将我的forked fb分支合并到同事的稳定分支的最佳方法?谢谢。 - pdn2020
@pdn2020 这是完全不同的问题,应该作为一个单独的问题提出,而不是在这里作为评论。 - phd

3
并不完全如此。如果你在GitHub.com网站上提交某些内容(例如通过点击铅笔图标编辑README.md文件,然后再点击GitHub网站上的提交按钮进行提交),预期行为是该提交应由Github.com签名(在我的情况下使用GPG密钥ID:4AEE18F83AFDEB23)。

Screenshot of GitHub signature


你是如何让github.com签署你的提交记录的?我的提交记录都只有部分验证(如果启用了警惕模式,则为未验证)。 - Android
@Android 我认为这是警戒模式的预期行为:https://docs.github.com/en/authentication/managing-commit-signature-verification/displaying-verification-statuses-for-all-of-your-commits#about-vigilant-mode - XF ZHAO

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