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

问题描述 投票:0回答:2

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

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 中显示的所有提交的签名的最简单方法是什么?

    

git github gnupg gpg-signature
2个回答
0
投票
我是否应该抓取并获取存储库中所有贡献者的所有公钥(例如使用他们的电子邮件),然后将它们插入到 gpg 中?

是的。
gpg

您可以从存储库中查看电子邮件列表:

gpg --recv-keys email1 email2…

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

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



0
投票
持久提交签名验证(现已公开预览版)

文档

包括:

无论选择哪种签名 - GPG、SSH 或 S/MIME - 一旦验证了提交签名,它就会在其存储库的网络中保持验证状态。
请参阅“

了解存储库之间的连接
”。 当提交签名在推送到 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

	
© www.soinside.com 2019 - 2024. All rights reserved.