为什么Git使用SHA-1作为版本号?

jpe*_*lli 38 git

Git使用SHA-1为用户引用提交.

Subversion(SVN)和Mercurial(hg)使用增量数字.

为什么Git团队做出使用SHA-1而不是更具描述性的设计决定?

Hol*_*ust 38

Mercurial(hg)也使用SHA1哈希值.它还试图从提交历史中获取修订号.但是,这些修订仅在一个存储库中有效.如果你看另一个回购,这些修订不能保证匹配.

至于为什么git和mercurial使用哈希:两者都有非线性提交历史.因为两者都是分布式的,所以人们可以在其本地存储库中使用相同的代码基础,而无需与中央权限同步(根据SVN和CVS的要求).现在,如果人们在本地提交他们的东西并在以后合并它们,那么您将很难找到一致的模式来形成线性增加的整数修订.即使你可以,你仍会在不同的回购之间得到不同的结果.

最后,这都是因为分布式的性质.这是一种为提交提供相当唯一标识符的简单方法.作为副产品,您还可以将完整的历史记录编码为哈希中的单个提交.这意味着,即使你在提交中有相同的差异,你可能会获得不同的SHA1哈希值.


Rob*_*ani 8

它既用作提交识别和验证的方法.SHA1编号是提交中所做的所有更改的校验和,加上作者的名称加上父提交的SHA1.(和IIRC它还包括提交消息,但不确定).

当您从远程数据库中提取/获取时,git将根据您收到的文件检查校验和,以确保您没有收到代码的损坏或修改版本.

  • 确切地说,校验和不是提交中的*更改*,而是整个树的更改,是的,它包含提交消息.每个树也由SHA1名称引用,就像该树中的每个文件一样. (6认同)