如何在本地验证其他人的签名提交?



出于分析目的,我想运行以下命令,看看哪些提交在一个相当大的存储库中已经签名:

git log --pretty="%h %G?"

根据 Git 文档,%G?占位符可以返回:

  • 良好(有效(签名的G
  • 签名错误的B
  • U一个未知有效性的良好签名
  • X已过期的良好签名
  • Y过期密钥的良好签名
  • R由吊销的密钥进行良好签名
  • E如果无法检查签名(例如缺少密钥(
  • N表示无签名

预期结果是获取在 GitHub 中显示为Verified的每个提交的G状态。但是,我得到的大多是E状态。

git verify-commit commit-sha具有E状态输出的提交:

gpg: Signature made Wed  17 June 13:19:22 2020 EEST
gpg:                using RSA key C90455E28OCA2B4DAD319037E77216ECEABAF951
gpg: Can't check signature: No public key

我已经完成了以下gpg设置:

git config --global gpg.program $(which gpg)
curl https://github.com/web-flow.gpg | gpg --import
gpg --edit-key noreply@github.com (where I put `trust` and gave 6 - ultimate)
gpg --lsign-key noreply@github.com

似乎我唯一得到的具有状态Ggit log提交是通过 GitHub 的 UI 完成的提交,因为它的密钥已成功插入gpg中。

我是否应该抓取并获取存储库中所有贡献者的所有公钥(例如通过使用他们的电子邮件(,然后将它们插入gpg?实际上,在本地 GitHub 中查看所有提交签名的最简单方法是什么?

我是否应该抓取并获取存储库中所有贡献者的所有公钥(例如通过使用他们的电子邮件(,然后将它们插入 gpg 中?

是的。gpg --recv-keys email1 email2…您可以从存储库中获取电子邮件列表:

git log --all --format="%ae" | sort -u
git log --all --format="%ce" | sort -u

(作者和提交者电子邮件(。让我们将其组合在几个命令中:

all_emails=$({ git log --all --format="%ae"; git log --all --format="%ce"; } | sort -u)
gpg --recv-keys $all_emails

最新更新