首页
学习
活动
专区
工具
TVP
发布
社区首页 >问答首页 >当git说它在“解决三角洲问题”时,它到底在做什么呢?

当git说它在“解决三角洲问题”时,它到底在做什么呢?
EN

Stack Overflow用户
提问于 2018-03-26 00:55:37
回答 2查看 0关注 0票数 0

在存储库的第一个克隆过程中,git首先接收对象(这很明显),然后花费大约相同的时间“解析三角洲”。在克隆的这个阶段到底发生了什么?

EN

Stack Overflow用户

发布于 2018-03-26 10:29:56

各阶段git clone是:

  1. 接收回购数据库中所有对象的“包”文件
  2. 为接收到的包创建索引文件
  3. 检查头部修改(显然,对于一个非裸回购)

“解析三角”是第二阶段的消息,为Package文件(“gitindex-pack”)建立索引。

包文件在其中有实际的对象ID,只有对象内容。因此,要确定对象ID是什么,git必须对包中的每个对象进行解压缩+SHA 1,以生成对象ID,然后将其写入索引文件。

包文件中的对象可以存储为增量,即对其他对象进行的一系列更改。在这种情况下,git需要检索基本对象,应用命令,并使用结果SHA 1。基对象本身可能必须通过应用一系列增量命令来派生。(即使在克隆的情况下,已经遇到了基本对象,但是内存中缓存的人造对象的数量是有限的)。

总之,“解决三角洲”阶段涉及到对整个回购数据库进行解压缩和校验,这并不令人意外地花费了相当长的时间。据推测,解压缩和计算SHA 1比应用增量命令花费更多的时间。

在后续的获取情况下,接收到的包文件可能包含对其他对象的引用(作为增量对象库),而接收GIT应该已经具有这些引用。在这种情况下,接收到的git实际上重写了接收到的包文件,以包含任何这样的引用对象,这样任何贮存包文件是自给自足的.。这可能是“解析三角洲”消息的发源地。

票数 0
EN
查看全部 2 条回答
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/-100003686

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档