【问题标题】:What's the difference between 'Commit ID' and 'SHA1 Hash' in GIT? [duplicate]GIT 中的“提交 ID”和“SHA1 哈希”有什么区别? [复制]
【发布时间】:2017-10-01 12:17:57
【问题描述】:

我从事 GIT 工作已经有一段时间了。

但是,我找不到 'Commit Id' 和 'SHA1 - hash value' 之间的区别

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

【问题讨论】:

  • 是一样的,只是id可以比完整的SHA1短(只要唯一标识提交)
  • @SergioTulentsev 提交 ID 始终是提交的 SHA1;在大多数情况下,您可以指定提交 ID 的明确前缀作为对提交的等效引用。

标签: git cryptography


【解决方案1】:

提交 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 哈希的 40 个十六进制字符。


示例

完整的提交 ID

 git show -s --format=%H

结果

42e2e5af9d49de268cd1fda3587788da4ace418a

简写版

  git show -s --format=%h

结果

42e2e5a

但请注意它们是相同的。

【讨论】:

  • 或者所谓的内容可寻址。其他一些 merkle 树实现,如 ZFS,使用地址作为引用,而不仅仅是内容。
【解决方案2】:

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

【讨论】:

    猜你喜欢
    • 2012-02-06
    • 1970-01-01
    • 2021-04-06
    • 2016-03-20
    • 2012-09-12
    • 2015-10-21
    • 2013-12-26
    • 2023-03-04
    • 2011-08-31
    相关资源
    最近更新 更多