Git目录结构中的怪异路径

纳赛尔

我已经在.git目录中看到以下路径。

.git/object/3b/12abef878787483abeceddaa5544489abff789a

当实际SHA为3b12abef878787483abeceddaa5544489abff789a时

这是文件内容的SHA,因此应在不包含/的情况下进行存储。为什么git将blob存储在这个奇怪的路径中,这样做的好处是什么?

乔纳森·莱夫勒

原因是要防止一个目录中的文件过多。与开头的所有SHA值3b存储在一个子目录3b,在任何单个目录的工作量是1/256的会是什么,如果所有的斑都在一个目录中。最终,这可以提高性能。查找特定斑点的搜索工作量减少。

您可以在terminfo目录中看到类似的效果,在目录中,根据终端条目的首字母将条目细分为目录。CPAN系统具有authors/id/A/AA/AARDVARK其命名层次结构。


请为我详细说明。

假设git要查找Blob 3b12abef878787483abeceddaa5544489abff789a,并且目录分区方案未使用。为了争辩,可能有512个Blob,并且要获取该文件,内核可能必须读取其中的所有512个目录条目.git/objects才能找到正确的条目。

现在假设正在使用目录分区方案,并且由于统计上的错误,奇迹般地出现了256个子目录,每个子目录包含2个文件。现在,内核在最坏的情况下必须在目录中读取每个条目具有2个字节名称的256个目录条目(相比之下,在./git/objects目录中则是从512个具有32个字节名称的目录条目读取,然后在最坏的情况下,内核必须读取2个具有30字节名称的条目该./git/objects/3b目录。

存在复杂的因素,例如不完全平衡的哈希和内存缓存以及磁盘访问,但是通常的想法是将文件分布到多个子目录中意味着OS内核要做的工作较少。如果目录中的文件数将扩展到数百个,则值得考虑对其进行分解。

本文收集自互联网,转载请注明来源。

如有侵权,请联系[email protected] 删除。

编辑于
0

我来说两句

0条评论
登录后参与评论

相关文章

来自分类Dev

目录路径列表中的节点层次结构

来自分类Dev

Git:获取.git目录中的Blob路径

来自分类Dev

从目录结构复制文件,路径中带有通配符

来自分类Dev

如何在php中获取git文件/目录树结构?

来自分类Dev

Git 忽略目录层次结构

来自分类Dev

Aurelia中的目录结构

来自分类Dev

MySQL中的目录路径

来自分类Dev

目录路径中的变量

来自分类Dev

目录结构-应该使用什么路径?

来自分类Dev

从概述的目录结构重建路径

来自分类Dev

是否有内置的查找目录路径的功能在层次结构中退后一步?

来自分类Dev

如何通过保持目录结构完整来同步路径中具有匹配模式的文件?

来自分类Dev

根据固定的相对路径在zip文件中包含目录结构

来自分类Dev

仅在目录结构中不存在文件的情况下,才将目录结构中的每个文件复制到特定路径中

来自分类Dev

Git-从仓库中检出单个目录-错误:pathspec [目录路径]与git已知的任何文件都不匹配

来自分类Dev

检查文件是否存在于路径中的任何目录中或当前目录是否在 git 项目中

来自分类Dev

在目录结构中搜索文件

来自分类Dev

在.htaccess中包含目录路径

来自分类Dev

删除目录中的长路径

来自分类Dev

删除目录中的长路径

来自分类Dev

多个目录中图像的路径

来自分类Dev

pdfKit 目录中 pdf 的路径

来自分类Dev

git addfilepattern无法读取我的目录路径

来自分类Dev

怪异的路径描述

来自分类Dev

在git中维护一个空目录结构,忽略其中的任何文件

来自分类Dev

Git命令使用相对路径包括子目录中的文件

来自分类Dev

zsh/bash:在执行前使用逻辑目录结构规则扩展命令参数中的相对路径

来自分类Dev

如何只列出不在.git目录子路径上的目录?

来自分类Dev

使用.gitignore忽略倍数路径上的相同目录结构

Related 相关文章

  1. 1

    目录路径列表中的节点层次结构

  2. 2

    Git:获取.git目录中的Blob路径

  3. 3

    从目录结构复制文件,路径中带有通配符

  4. 4

    如何在php中获取git文件/目录树结构?

  5. 5

    Git 忽略目录层次结构

  6. 6

    Aurelia中的目录结构

  7. 7

    MySQL中的目录路径

  8. 8

    目录路径中的变量

  9. 9

    目录结构-应该使用什么路径?

  10. 10

    从概述的目录结构重建路径

  11. 11

    是否有内置的查找目录路径的功能在层次结构中退后一步?

  12. 12

    如何通过保持目录结构完整来同步路径中具有匹配模式的文件?

  13. 13

    根据固定的相对路径在zip文件中包含目录结构

  14. 14

    仅在目录结构中不存在文件的情况下,才将目录结构中的每个文件复制到特定路径中

  15. 15

    Git-从仓库中检出单个目录-错误:pathspec [目录路径]与git已知的任何文件都不匹配

  16. 16

    检查文件是否存在于路径中的任何目录中或当前目录是否在 git 项目中

  17. 17

    在目录结构中搜索文件

  18. 18

    在.htaccess中包含目录路径

  19. 19

    删除目录中的长路径

  20. 20

    删除目录中的长路径

  21. 21

    多个目录中图像的路径

  22. 22

    pdfKit 目录中 pdf 的路径

  23. 23

    git addfilepattern无法读取我的目录路径

  24. 24

    怪异的路径描述

  25. 25

    在git中维护一个空目录结构,忽略其中的任何文件

  26. 26

    Git命令使用相对路径包括子目录中的文件

  27. 27

    zsh/bash:在执行前使用逻辑目录结构规则扩展命令参数中的相对路径

  28. 28

    如何只列出不在.git目录子路径上的目录?

  29. 29

    使用.gitignore忽略倍数路径上的相同目录结构

热门标签

归档