Mercurial(hg)也使用SHA1哈希。它只是尝试从提交历史中获取修订版本号。然而,这些修订版本号仅在一个存储库中有效。如果您观看另一个存储库,则不能保证这些修订版本号匹配。
至于为什么git和mercurial使用哈希:两者都具有非线性提交历史。因为两者都是分布式的,人们可以在本地存储库中使用相同的代码基础而不必同步到中央机构(如SVN和CVS所需)。现在,如果人们在本地提交其内容并稍后合并它们,那么您将很难想出一致的模式来形成线性递增的整数修订版本。即使您可以,不同的存储库之间仍会得到不同的结果。
最终,这都是由于分布式性质引起的。这是一种简单的方法,可以提出相当独特的标识符以用于提交。并且,作为副产品,您还可以将完整的历史记录编码为单个提交的哈希值。这意味着,即使您在提交中拥有相同的diff,您也很可能会获得不同的SHA1哈希值。
SHA1号码既用作提交标识的方法,也用作验证的方法。SHA1号码是提交中所有更改加上作者姓名和父提交的SHA1号码的校验和。(如果我没记错的话,它还包括提交信息,但不确定)。
当你从远程拉取/获取时,git会检查校验和与你接收到的文件相匹配,以确保你没有收到损坏或修改过的代码版本。