3 回答
TA贡献2039条经验 获得超7个赞
索引是一个二进制文件(通常保存在 .git/index
)包含一个排序的路径名称列表,每个路径名称都具有权限和BLOB对象的SHA 1; git ls-files
可以显示索引的内容:
$ git ls-files --stage 100644 63c918c667fa005ff12ad89437f2fdc80926e21c 0 .gitignore 100644 5529b198e8d14decbe4ad99db3f7fb632de0439d 0 .mailmap
索引是GIT中最重要的数据结构之一。 它通过记录路径及其对象名称的列表来表示虚拟工作树状态,并充当一个临时区域来写出要提交的下一个树对象。 状态是“虚拟的”,因为它不一定要,而且通常不匹配工作树中的文件。
Git索引文件具有以下格式
所有二进制数字都是按网络字节顺序排列的。
第2版在此说明,除非另有说明。
由以下内容组成的12字节头:
4字节 签名:
签名是{‘
D
', 'I
', 'R
', 'C
)(代表“
dircache
")4字节 版本号:
当前支持的版本是2、3和4。 索引条目的32位数。 若干排序
索引条目 .扩展:
扩展是通过签名标识的。
如果Git不理解它们,则可以忽略可选扩展。
GIT目前支持缓存树和解析撤消扩展。
4字节扩展签名。如果第一个字节是‘
A
'..'Z
‘扩展是可选的,可以忽略。 扩展的32位大小 扩展数据 在此校验和之前,160位SHA-1超过索引文件的内容.
如果索引是准备下一次提交的地方,为什么没有“ git ls-files -s
“提交后什么也不归还?
git diff --cached
git ls-files -s
benpeart
).pclouds
).gitster
--
增加索引条目偏移表(IEOT)扩展
此修补程序通过向索引中添加额外的数据来解决加载索引的CPU成本,这将使我们能够高效地多线程加载和转换缓存条目。
它通过向索引文件中的缓存条目块添加一个(可选的)索引扩展来实现这一点。
为了实现V4索引的工作,在编写缓存条目时,它会周期性地“重置”前缀-通过对当前条目进行编码来进行压缩,就好像前面条目的路径名称完全不同一样,并将该条目的偏移量保存在IEOT中。 基本上,使用V4索引,它会将偏移生成前缀压缩条目块.
read-cache.c load_cache_entries_threaded()
peff
).gitster
--
读取-缓存:从线程加载中删除未使用的参数。
这个 load_cache_entries_threaded()
函数采用 src_offset
参数不使用的参数。它自成立以来就一直存在。 77ff112 (read-cache
:在工作线程上加载缓存条目,2018-10-10,Git v2.20.0-rc0)。
深入了解邮件列表,该参数是 系列的早期迭代,但是当代码切换到使用IEOT扩展时,就变得没有必要了
- 3 回答
- 0 关注
- 452 浏览
添加回答
举报