我是git的新手,我看到可以用gpg签名标签。我理解公钥加密是如何工作的,我理解如何对标签进行签名,但这样做有什么意义呢?
答案 0 :(得分:29)
签署标记的重点是,现在任何拥有您的公钥的人都可以证明您已批准该特定提交作为该程序的特定版本。如果他们碰巧信任您作为该软件包的官方发行版本,那么他们就知道他们获得了该软件包的正式版本,而不是一些可能被攻击者后悔或在传输过程中损坏的随机版本。
答案 1 :(得分:10)
了解git object model的基础知识会显示签名代码的价值。
从Git Community Book借来的下图描绘了一个特定的快照。阴影框是git对象。左侧的提交对象是指树。可以将树视为文件系统目录,因此树对象引用其他树和blob。 blob对象存储文件内容。
每个git对象都有一个SHA1,一个从该对象内容派生而来的唯一40个字符的十六进制摘要。对象上方的缩写十六进制字符串代表它们各自的SHA1。
Git对象是不可变的:更改对象内容的甚至单个位会更改其名称。它一直是SHA1。对blob的任何更改都需要一个新树,然后又需要一个新的提交,因此不可能同时使用不同的内容和avoid detection。只知道提交的SHA1可以为您提供精确的,完整性检查的树快照。
提交也指其直接父级(或者在合并的情况下为多个父级),因此保证更强。在提交历史记录中的任何位置更改单个位 也会更改其SHA1。只知道单个提交的SHA1会为您提供大量信息:精确历史上下文中的确切树将一直返回到第一次提交。
任何人都可以创建提交,任何人都可以声明,例如,Linus Torvalds。知道哪些提交值得信赖非常重要。引用提交的签名标记为您提供上述所有信息以及可验证的真实性。许多项目使用签名标签作为标记正式祝福版本的方式。