git commit -S 和 -s 有什么区别?

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

我最近了解了签名提交并推荐它们。我们可以使用

git commit -S
在本地签署提交。之后我阅读了 git 手册页,其中有一个名为
-s
的选项(用作
git commit -s
),它表示该选项对提交进行签名。当我查找
-S
时,它说它使用 GPG 密钥签署了提交。

我正在 GitHub 中使用 GPG 密钥设置签名提交。这在推送时有区别吗?或者在推送到远程时是否相同?

git git-commit git-sign
2个回答
6
投票

-s/--signoff
的实际描述是:

在提交日志消息的末尾添加由提交者签署的行。签收的含义取决于项目,但它通常证明提交者有权在相同的许可下提交此作品并且同意开发者原产地证书(请参阅 http://developercertificate.org/ 了解更多信息)。

如上所述,它基本上在提交消息的末尾添加了“Signed-off-by:”行,如下所示:

$ git log
commit 172ccc467d2171b645bb55d51146af82ac36d356 (HEAD -> master)
Author: gino <[email protected]>
Date:   Sun Nov 15 11:56:10 2020 +0900

    Added something
    
    Signed-off-by: gino <[email protected]>

您可以将其解读为“我批准了该提交,并且我对此负责”。它的目的已经在这篇相关文章中得到了很好的回答:Git 中的 Sign Off 功能有什么用?。这是项目将责任分配给提交的一种方式,正如该帖子中提到的已接受的答案,当提交的版权或许可证相关时,这是必需的。

但由于它只是提交消息的一部分,任何人都可以添加/编辑它,并且您实际上可以通过手动键入或使用提交消息模板自己添加它。您甚至可以将其他人的姓名/电子邮件放在那里。在 Github 上,它的处理方式与任何其他多行提交消息相同

...并且 Github 不会根据签核行验证提交,也不会显示任何“此提交已被批准”的 UI 指示符。这当然违反了 DCO,这是签核的目的,并且您可以使用一些插件/机器人来为 PR 强制执行它,例如 probot/dco

另一方面,

-S/--gpg-sign

选项是一个实际的加密签名,因为它使用在 you 进行提交的 your 机器上生成的 your GPG 密钥 you,然后 Github 使用  you 提供的您的公钥,用于验证提交确实来自 you(或来自拥有您的 GPG 密钥的来源)。正如关于签名提交的 Github 文档所说:

使用 GPG 或 S/MIME,您可以在本地签署标签并提交。这些标签或提交在 GitHub 上标记为已验证,以便其他人可以相信更改来自受信任的来源。

如果提交或标签具有无法验证的签名,GitHub 会将提交或标签标记为未验证。

存储库管理员可以在分支上强制执行所需的提交签名,以阻止所有未经签名和验证的提交。

使用

-S

 签名并由 Github 正确验证的提交将显示“已验证”指示符:

确保按照

GPG 提交签名验证中的步骤进行操作。 Github 将使用它来:

验证签名时,我们提取签名并尝试解析其密钥 ID。我们将 key-id 与上传到 GitHub 的密钥进行匹配。在您将 GPG 密钥上传到 GitHub 之前,我们无法验证您的签名。


至于使用哪一个,这取决于你在 Github 上发布的内容以及你“签署提交”的目的是什么。我想说,如果您只是想证明实际上是您(或您的一台机器/机器人)推动了该提交,那么使用 GPG 密钥签名更有意义。


3
投票

--gpg-sign

的缩写)使用 gnupg 来签署您的提交,并为其添加 PGP 签名。这是一个加密签名,证明 gpg 密钥的所有者或有权访问它的参与者正在进行该提交/标记
-s

--signoff

的缩写)将“
Signed-off-by: Username<Email>
”添加到提交消息的末尾。任何人都可以将此字符串放入提交消息中(因此它不能保证作者身份),但它已被用来维护版权。有些项目需要此
DCO
“开发者原产地证书”——本质上是开发者已证明他们有权贡献代码的证明

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