因此,有人对我的工作进行了审查,他告诉我,我应该始终对自己的提交和标签进行加密签名。当被问到为什么时,他不知道向我解释它,并说“这是一件好事”。
为了避免出现明显的黑猩猩情形,我为什么要这么做呢?真的有这么多明显的优势而没有劣势吗?
有什么实际原因会使我想要签署我所做的每个提交和标记?
因此,有人对我的工作进行了审查,他告诉我,我应该始终对自己的提交和标签进行加密签名。当被问到为什么时,他不知道向我解释它,并说“这是一件好事”。
为了避免出现明显的黑猩猩情形,我为什么要这么做呢?真的有这么多明显的优势而没有劣势吗?
有什么实际原因会使我想要签署我所做的每个提交和标记?
Answers:
(这主要是基于《 Git恐怖故事:带签名的存储库完整性》 —很好的阅读,而且还有比我能回答的更多的信息。)
可以通过多种方式破坏git存储库(这不是安全缺陷,只是生活中的事实-因此不应避免使用git)。例如,某人可能已将您声称是您推送到您的存储库。或就此而言,某人可能已推送到声称自己是您的其他人的存储库中(某人可能已推送到声称自己也是您的自己的存储库中)。这只是DVCS生活的一部分。
举个例子:
$ git config --global user.name 'Madara Uchiha'
$ git config --global user.email muchiha@example.com
在那里,我更改了git的配置以假装我是你。现在我可以提交,让那些提交以某种方式进入生产构建,看起来您已经完成了。
通过对提交(和标签)进行签名,可以证明某些提交和标签来自您(未签名的内容不应该进入生产版本)。这实际上就是全部的关键-通过签署提交,您已经说过这是您的工作。
“工作”方面在偶尔受到版权诉讼打击的linux内核(以及git)中尤其重要。通过签署承诺,您表示您拥有该软件的权利-它会跟踪源。可能是您无权访问被声明为版权的来源,并且该声明是毫无根据的。可能是该公司忘记了您几年前为他们工作,并且在他们的指导下为内核增加了材料,或诸如此类。
关于是否应该签署每个提交有一些争论。从GPG签署git commit?(早在09年),莱纳斯写道:
签署每个提交完全是愚蠢的。这仅意味着您将其自动化,并且使签名价值降低。它也没有增加任何实际价值,因为SHA1的git DAG链的工作方式,您只需要一个签名就可以使该提交有效地覆盖所有提交。因此,对每个提交进行签名只是遗漏了要点。
关于git登录的更多想法也可以在这里阅读。
也就是说,无论如何它都进入了git。
似乎已经达成共识,即不需要签署提交,但是签署标签非常好。顶部链接的博客文章表明,无论如何都应签名。如我所说,关于每次提交是否必要都存在一些争论。
“签署每次提交”辩论的关键可能与您使用的工作流程有关。大多数人在其本地存储库中进行大量提交,然后推送该组。标记最终集合就足够了(假设,即,确保所有更改都是正确的)。如果您在许多单个提交都在移动的环境中工作,则标记和提交之间的区别会变得越来越少……明显-签署提交可能会变得更加有用。
commit.gpgsign = true
可以确定没有缺点。虽然这可能很愚蠢,但似乎并不太昂贵。