出于分析目的,我想运行以下命令,看看哪些提交在一个相当大的存储库中已经签名:
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
似乎我唯一得到的具有状态G
git 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