我对这个问题非常好奇。提交ID不能随机生成,因为它们需要是唯一的。虽然它们看起来像是随机的,但我想知道,为什么它们不只是连续的数字呢?我的意思是,它们只需要在存储库中是唯一的,对吗?或者我理解错了?
谢谢!
谢谢!
在像Git这样的分布式版本控制系统中,修订号必须在所有系统中保持一致。由于Git历史记录是一个有向无环图而不是线性系列,因此提交和对象使用SHA-1哈希进行跨系统的明确标识。
Git中的提交ID并非随机生成。实际上,它们是提交对象的SHA-1哈希值,其中包括树和对象的清单。有关详细信息,请参见Git内部结构。最终结果是任何给定对象哈希都是确定性的:相同的对象将导致相同的哈希,无论它如何到达当前状态。
它们在远程、断开的存储库中也需要是唯一的,因此它们不能只是递增的数字。
实际上,它们是提交信息的SHA1哈希值。作为其内容的加密哈希值也很有价值,因为它意味着内容是经过加密验证的。Git在整个过程中使用哈希来确保存储库抵抗篡改。
理论上可能会出现哈希碰撞,但是加密哈希被设计成难以故意制造碰撞,并且计算机自行燃烧的概率比碰撞发生的概率更高。