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

3

我最近了解到签名提交,它是被推荐的。我们可以使用 git commit -S 在本地进行签名提交。此后我阅读了git手册,其中有一个选项叫做-s(使用git commit -s),它表示该选项会对提交进行签名。当我查询-S时,发现它会使用 GPG 密钥进行签名。

我正在GitHub上设置使用GPG密钥进行签名提交。在推送提交时,这是否会有影响?还是远程推送时与之前相同?


1
相关:Git 中的 Sign Off 功能有什么作用?-s--signoff 的简写) - Gino Mempin
“--signoff”和“-S”的区别是什么? - Hyperx837
2个回答

6
实际上,-s/--signoff 的描述如下:

在提交日志消息的末尾添加由提交者签署的 Signed-off-by 行。 Signoff 的含义取决于项目,但通常表示提交者有权以相同的许可证提交此工作,并同意 Developer Certificate of Origin(有关更多信息,请参见 http://developercertificate.org/)。

如上所述,它基本上在提交消息的末尾添加了一个 "Signed-off-by:" 行,就像这样:
$ git log
commit 172ccc467d2171b645bb55d51146af82ac36d356 (HEAD -> master)
Author: gino <my@email.com>
Date:   Sun Nov 15 11:56:10 2020 +0900

    Added something
    
    Signed-off-by: gino <my@email.com>

你可以将其理解为“我批准了该提交并对其负责”。它的目的已经在这篇相关文章中得到了很好的回答: Git 中的 Sign Off 功能是什么?。它主要是一种基于项目的分配提交责任的方式,正如那篇文章中的被接受的答案所提到的,当提交的版权或许可证相关时是必需的。
但是由于它只是提交消息的一部分,任何人都可以添加/编辑它,你甚至可以通过手动输入或使用提交消息模板自己添加它。你甚至可以在上面放别人的姓名/电子邮件。在 Github 上,它将像任何其他多行提交消息一样处理:

enter image description here

...而 Github 不会基于签名行验证提交或显示任何 UI 指示“此提交已获批准”。这当然是违反 DCO 的目的,而签名的目的就是为了遵守 DCO。你可以使用插件/机器人来强制执行 PRs,比如这个probot/dco

另一方面,-S/--gpg-sign 选项是一个实际的加密签名,因为它使用 的计算机上生成的 GPG 密钥,然后 Github 使用 给出的公钥来验证该提交确实来自 (或具有您的 GPG 密钥的源)。正如 Github 签署提交文档 所述:

使用 GPG 或 S/MIME,您可以本地签署标记和提交。这些标记或提交被标记为已验证的 GitHub 上,因此其他人可以信任更改来自可信来源。
如果提交或标记具有无法验证的签名,则 GitHub 将标记该提交或标记为未经验证。
仓库管理员可以强制执行所需的提交签名以阻止未签名和未经验证的所有提交。
使用 -S 签名并由 Github 正确验证的提交将显示 "已验证" 指示符:

enter image description here

请务必按照GPG提交签名验证上的步骤进行操作。Github将使用它来:

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


关于使用哪种方法,这取决于你在Github上放置的内容和“签署提交”的目的。如果你只是想显示提交实际上是由(或你的机器/机器人之一)推送的,那么使用GPG密钥进行签名更有意义。

3

-S(简称--gpg-sign)使用gnupg对提交进行签名,并添加PGP签名,这是一个加密的签名,证明具有gpg密钥的所有者或能够访问该密钥的任何人正在进行该提交/标记。

-s(简称--signoff)将“<Signed-off-by:Username<Email>>”添加到您的提交消息末尾。任何人都可以在提交消息中放置此字符串(因此它不是作者身份的任何保证),但它已被用于维护版权。一些项目要求使用DCO“开发者原产地证书”,即开发人员已经确认他们获得了贡献代码的许可证。


网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接