出于分析目的,我想运行以下命令并查看哪些提交已在相当大的存储库中签名:
git log --pretty="%h %G?"
根据 Git 文档,
%G?
占位符可以返回:
G
良好(有效)的签名B
签名不好U
一个未知有效性的良好签名X
已过期的好签名Y
使用过期密钥制作良好的签名R
使用已撤销的密钥制作良好的签名E
如果无法检查签名(例如丢失密钥)N
无签名预期结果是为每个提交获得
G
状态,在 GitHub 中显示为 Verified
。然而,我得到的大多是 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 [email protected] (where I put `trust` and gave 6 - ultimate)
gpg --lsign-key [email protected]
似乎我获得的具有状态
git log
的唯一提交是通过 GitHub UI 完成的,因为它的密钥已成功插入到 G
中。我是否应该抓取并获取存储库中所有贡献者的所有公钥(例如使用他们的电子邮件),然后将它们插入gpg
?实际上,查看本地 GitHub 中显示的所有提交的签名的最简单方法是什么?
是的。
gpg
您可以从存储库中查看电子邮件列表:
gpg --recv-keys email1 email2…
(作者和提交者电子邮件)。让我们将其合并到几个命令中:
git log --all --format="%ae" | sort -u
git log --all --format="%ce" | sort -u
请参阅“获取提交了解存储库之间的连接
”。 当提交签名在推送到 GitHub 时经过验证时,验证记录会与提交一起存储。该记录无法编辑,并且将持续存在,以便签名随着时间的推移保持验证状态,即使签名密钥被轮换、撤销或贡献者离开组织也是如此。验证记录包含验证完成时的时间戳标记。这种持久记录可确保一致的验证状态,从而在存储库中提供稳定的贡献历史记录。
您可以通过将鼠标悬停在 GitHub 上的“
all_emails=$({ git log --all --format="%ae"; git log --all --format="%ce"; } | sort -u) gpg --recv-keys $all_emails
”徽章上或通过 REST API(其中包含
字段)访问提交来查看此时间戳。Verified
请参阅“用于提交的 REST API 端点
”。 在您的情况下,您可以
,并检查verified_at
对象是否包含所述
verification
字段。使用GitHub CLI api
verified_at