Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/git/24.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Git 什么';这是';提交ID';和';SHA1散列';用吉特?_Git_Cryptography - Fatal编程技术网

Git 什么';这是';提交ID';和';SHA1散列';用吉特?

Git 什么';这是';提交ID';和';SHA1散列';用吉特?,git,cryptography,Git,Cryptography,我已经在GIT上工作了很长时间了 但是,我找不到“提交Id”和“SHA1-哈希值”之间的区别 “提交ID”和“SHA1”之间有什么区别?任何带有示例的简单解释都很好Commit ID是识别提交的标识。有时您会看到速记版本,它只是实际提交ID的前七个字符,而不是完整的哈希 考虑以下示例: `[master 42e2e5a] Added a new readme file to illustrate commit IDs. 1 file changed, 1 insertion(+) create

我已经在GIT上工作了很长时间了

但是,我找不到“提交Id”和“SHA1-哈希值”之间的区别


“提交ID”和“SHA1”之间有什么区别?任何带有示例的简单解释都很好

Commit ID是识别提交的标识。有时您会看到速记版本,它只是实际提交ID的前七个字符,而不是完整的哈希

考虑以下示例:

`[master 42e2e5a] Added a new readme file to illustrate commit IDs.
1 file changed, 1 insertion(+)
create mode 100644 myreadme
请注意,它显示了提交ID的简写版本。因为实际提交ID是四十个十六进制字符,用于指定160位SHA-1哈希


例子 完整提交ID

 git show -s --format=%H
  git show -s --format=%h
结果

42e2e5af9d49de268cd1fda3587788da4ace418a
42e2e5a
速记版本

 git show -s --format=%H
  git show -s --format=%h
结果

42e2e5af9d49de268cd1fda3587788da4ace418a
42e2e5a

但是请注意,它们是一样的。

我已经阅读了前面提供的答案,我认为有一点需要补充。修订总是指向一个sha1(它实际上并不指向,修订是由它的sha1 ID标识的,但请注意我),但git数据库中的对象可以是:修订、树、blob等等,它们都由sha1 ID标识。因此,修订意味着使用sha1 ID(用于标识它…但在修订中使用了其他sha1 ID,如父级、树对象),但sha1 ID并不一定意味着它是修订。

这是一样的,只有ID可以比完整的sha1短(只要它唯一标识提交)@SergioTulentsev提交ID始终恰好是提交的SHA1;在大多数上下文中,您可以指定提交ID的明确前缀作为提交的等效引用,或者称为内容可寻址的引用。其他一些merkle树实现,如ZFS,使用地址作为引用,而不仅仅是内容。