git索引到底包含什么?

git索引到底包含什么?

Git索引到底包含什么,我可以使用什么命令来查看索引的内容?


更新

谢谢你的回答。我知道索引充当一个分阶段区域,提交的内容是在索引中而不是在工作树中。我只是好奇索引对象是由什么组成的。我想可能是一个文件名/目录名的列表,SHA-1对,可能是一种虚拟树?

用Git术语来说,有没有管道命令,可以用来列出索引的内容吗?


拉莫斯之舞
浏览 453回答 3
3回答

largeQ

Git书中有一篇关于索引包括什么?:索引是一个二进制文件(通常保存在.git/index)包含一个排序的路径名称列表,每个路径名称都具有权限和BLOB对象的SHA 1;git ls-files可以显示索引的内容:$ git ls-files --stage 100644 63c918c667fa005ff12ad89437f2fdc80926e21c 0   .gitignore 100644 5529b198e8d14decbe4ad99db3f7fb632de0439d 0   .mailmap这个活泼的Git问题给出了关于该结构的更多细节:索引是GIT中最重要的数据结构之一。它通过记录路径及其对象名称的列表来表示虚拟工作树状态,并充当一个临时区域来写出要提交的下一个树对象。状态是“虚拟的”,因为它不一定要,而且通常不匹配工作树中的文件。想看更多,参考文献。“git/Documentation/technical/index-format.txt":Git索引文件具有以下格式所有二进制数字都是按网络字节顺序排列的。第2版在此说明,除非另有说明。由以下内容组成的12字节头:4字节签名:签名是{‘D', 'I', 'R', 'C)(代表“dircache")4字节版本号:当前支持的版本是2、3和4。索引条目的32位数。若干排序索引条目.扩展:扩展是通过签名标识的。如果Git不理解它们,则可以忽略可选扩展。GIT目前支持缓存树和解析撤消扩展。4字节扩展签名。如果第一个字节是‘A'..'Z‘扩展是可选的,可以忽略。扩展的32位大小扩展数据在此校验和之前,160位SHA-1超过索引文件的内容.mljrg 评论意见:如果索引是准备下一次提交的地方,为什么没有“git ls-files -s“提交后什么也不归还?因为索引表示正在跟踪的内容。,在提交之后,正在跟踪的内容与最后一次提交相同(git diff --cached什么也不回)。所以git ls-files -s列出跟踪的所有文件(输出中的对象名称、模式位和阶段号)。这个列表(跟踪的元素)是用提交的内容初始化的。切换分支时,索引内容将重置为刚刚切换到的分支引用的提交。GIT2.20(2018年Q4)增加了一个索引项偏移表(IEOT):看见提交77f 112, 承诺3255089, 提交abb4bb8, 提交c 780b9c, 提交3b1d9e0, 承诺371 ed0d(2018年10月10日)本·皮尔特benpeart).看见提交252 d079(2018年9月26日)ễn Thái Ngọc Duy(pclouds).(合并为Junio C Hamano-gitster --在……里面提交e27bfaa,2018年10月19日)增加索引条目偏移表(IEOT)扩展此修补程序通过向索引中添加额外的数据来解决加载索引的CPU成本,这将使我们能够高效地多线程加载和转换缓存条目。它通过向索引文件中的缓存条目块添加一个(可选的)索引扩展来实现这一点。为了实现V4索引的工作,在编写缓存条目时,它会周期性地“重置”前缀-通过对当前条目进行编码来进行压缩,就好像前面条目的路径名称完全不同一样,并将该条目的偏移量保存在IEOT中。基本上,使用V4索引,它会将偏移生成前缀压缩条目块.带着新的index.linesconfig设置,索引加载速度更快。因此(使用IEOT), 提交7bd9631清理read-cache.c load_cache_entries_threaded()Git 2.23(Q3 2019)的职能。看见承诺8373037, 提交d713e88, 提交d 92349d, 承诺113 c29a, 提交c95fc72, 提交7a2a721, 提交C 016579, 提交为27fb7, 实施13a1781, 提交7bd9631, 提交3c1dce8, 提交cf7a901, 提交d64db5b, 提交76a7bc0(2019年5月9日)杰夫·金(peff).(合并为Junio C Hamano-gitster --在……里面提交c0e78f7,2019年6月13日)读取-缓存:从线程加载中删除未使用的参数。这个load_cache_entries_threaded()函数采用src_offset参数不使用的参数。它自成立以来就一直存在。77ff112 (read-cache:在工作线程上加载缓存条目,2018-10-10,Git v2.20.0-rc0)。深入了解邮件列表,该参数是系列的早期迭代,但是当代码切换到使用IEOT扩展时,就变得没有必要了
打开App,查看更多内容
随时随地看视频慕课网APP