例如,如果您要构建一个目录结构,其中一个目录是为 Git 存储库中的提交命名的,并且您希望它足够短以使您的眼睛不会流血,但又足够长以防止发生碰撞可以忽略不计,通常需要多少 SHA 子字符串?
假设我想唯一标识此更改:https ://github.com/wycats/handlebars.js/commit/e62999f9ece7d9218b9768a908f8df9c11d7e920
我可以使用前四个字符: https ://github.com/wycats/handlebars.js/commit/e629
但我觉得那样会有风险。但是假设一个代码库在几年内可能会发生“大概”30k 的变化,如果我使用 8 个字符,那么发生冲突的可能性有多大?12?有没有一个数字通常被认为可以接受这种事情?
这个问题实际上在Pro Git 书的第 7 章中得到了回答:
通常,八到十个字符足以在一个项目中保持唯一性。最大的 Git 项目之一,Linux 内核,开始需要 40 个字符中的 12 个来保持唯一性。
7 位数字是短 SHA 的 Git 默认值,因此对于大多数项目来说都可以。如前所述,Kernel 团队已经增加了好几次,因为他们有 几十万次 提交。因此,对于您的约 30k 次提交,8 或 10 位数字应该是完全可以的。