40

Git 使用 SHA-1 供用户参考提交。

Subversion (SVN) 和Mercurial (hg) 使用增量编号。

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

4

3 回答 3

37

Mercurial (hg) 也使用 SHA1 哈希。它也只是试图从提交历史中获取修订号。但是,这些修订仅在一个存储库中有效。如果您观看另一个 repo,则不能保证这些修订是匹配的。

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

归根结底,这都是因为分布式特性。这是一种为提交提供相当独特的标识符的简单方法。作为副产品,您还可以将完整的历史记录编码为单个提交到哈希中。这意味着,即使您在提交中有相同的差异,您也可能会得到不同的 SHA1 哈希值。

于 2012-06-27T19:35:38.180 回答
7

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

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

于 2012-06-27T19:33:29.600 回答
1

Git 和 HG 都使用 SHA1 来识别提交。SVN 运行一个顺序变化模型,因此能够支持增量版本号,而 Git 和 HG 更复杂,支持有向无环图开发模型,更适合频繁的分支和合并。

The HG incremental number is different from the SVN incremental number and is not suitable for refering to a particular revision across different copies of a repository, so cannot be used in the same way as the SVN revision number.

于 2012-06-27T19:37:17.490 回答