在第一次克隆存储库时,git首先接收对象(这很明显),然后花费大约相同的时间"解析增量".在克隆的这个阶段实际发生了什么?
ara*_*nid 106
阶段git clone是:
"解决增量"是为第二阶段显示的消息,索引包文件("git index-pack").
包文件中没有实际的对象ID,只有对象内容.因此,为了确定对象ID是什么,git必须对包中的每个对象进行解压缩+ SHA1以生成对象ID,然后将其写入索引文件.
包文件中的对象可以存储为增量,即对一些其他对象进行的一系列改变.在这种情况下,git需要检索基础对象,应用命令和SHA1结果.可能必须通过应用一系列delta命令来派生基础对象本身.(即使在克隆的情况下,已经遇到过基础对象,但在内存中缓存了多少制造对象的限制).
总之,"解决增量"阶段涉及对整个仓库数据库进行解压缩和校验和处理,这不足为奇地花费了很长时间.据推测,解压缩和计算SHA1实际上比应用delta命令需要更多的时间.
在后续提取的情况下,所接收的包文件可以包含对接收git预期已经具有的其他对象的引用(作为增量对象基础).在这种情况下,接收git实际上重写接收的包文件以包括任何这样的引用对象,以便任何存储的包文件是自给自足的.这可能是"解决增量"消息的来源.
Amb*_*ber 50
Git使用delta编码来存储packfiles中的一些对象.但是,你不希望有播放的每一个修改过,以获得最新的版本在给定的文件,这样的Git还具有存储和文件内容偶尔的快照."解决增量"是确保所有这些保持一致的步骤.
这是 Pro Git书中"Git Internals"部分的一章,可以在线获取,讨论这一点.
| 归档时间: |
|
| 查看次数: |
40949 次 |
| 最近记录: |