在git中签名标签有什么意义?

Ken*_*Ken 29 git

我是git的新手,我看到可以用gpg签名标签.我理解公钥加密是如何工作的,我理解如何对标签进行签名,但这样做有什么意义呢?

Bri*_*ell 29

签名标记的重点是,现在任何拥有您的公钥的人都可以证明您已批准该特定提交为该特定版本的程序.如果他们碰巧信任您作为该软件包的官方发行版本,那么他们就知道他们获得了该软件包的正式版本,而不是一些可能被攻击者后悔或在传输过程中损坏的随机版本.

  • 此外,补丁经常被重新命名或以其他方式重写.当你这样做时,你必须删除原始的提交者签名(因为你不能用他们的密钥签名),也许你自己添加,但是这会让每个人的签名意味着混淆(这是否意味着他们写了补丁?批准了吗?审核了吗?).通过仅签署版本,您可以减少混淆; 您只是声称此标记对应于此正式版本,该版本已经过项目所具有的任何代码审查和测试过程. (3认同)
  • 嗨布莱恩,非常感谢你的回答.所以基本上它意味着我可以从不受信任的来源签出一个版本并仍然确保代码不变,对吧?现在,如果这对标签有用,为什么它不是提交和推/拉操作的常用过程呢? (2认同)
  • @Ken有几个原因.首先,它会增加开发过程的摩擦力,或降低安全性.您将需要不断地键入您的GPG密钥密码,或者加载了存储它的代理,这会增加您的漏洞窗口.此外,人们不一定要以密码方式承诺站在仍在开发周期中的补丁之后; 也许他们会认为补丁是一个坏主意,只是想放弃那个补丁,而不用担心由于签名而让别人认为它是正式的. (2认同)
  • 如果你愿意,你可以使用`git notes`和一些帮助脚本自己实现每个提交的签名.和[Monotone](http://www.monotone.ca/),一个分布式修订控制系统,Git受到很大影响(提交的基本表示形式为对树的链接引用及其父母由SHA-1总和识别的是取自Monotone)确实是签署每个提交的路线,因此如果您对此功能感兴趣,可以查看Monotone. (2认同)

Gre*_*con 10

理解git对象模型的基础知识可以显示签名标记的价值.

借用Git社区手册的下图描绘了一个特定的快照.阴影框是git对象.左侧的提交对象是指树.可以将树视为文件系统目录,因此树对象引用其他树和blob.blob对象存储文件内容.

git对象

每个git对象都有一个SHA1,一个从该对象的内容派生的唯一的40个字符的十六进制摘要.对象上方的缩写十六进制字符串代表它们各自的SHA1.

Git对象是不可变的:甚至更改对象内容的一个位也会改变其名称.它一直是SHA1.对blob的任何更改都需要一个新树,然后又需要一个新的提交,因此不可能同时使用不同的内容并避免检测.只知道提交的SHA1可以为您提供精确,完整性检查的树快照.

提交也指其直接父级(或者在合并的情况下为多个父级),因此保证更强.在提交历史记录中的任何位置更改单个位也会更改其SHA1.只知道单个提交的SHA1会为您提供大量信息:确切历史记录中的确切树一直回到第一次提交.

任何人都可以创建提交,任何人都可以声称是Linus Torvalds.知道哪些提交值得信赖非常重要.引用提交的签名标记为您提供上述所有信息以及可验证的真实性.许多项目使用签名标签作为标记正式祝福版本的方式.

  • 有谁知道用什么软件在Git社区图书中创建出色的图表? (3认同)
  • 完成:http://superuser.com/questions/286263/what-software-was-used-to-create-the-diagrams-in-the-git-community-book (2认同)