git是否会缓解它的结果?

时间:2017-02-01 10:00:17

标签: git

我已经使用git一段时间,但是当我在像LibreOffice这样的非常大的项目中使用git时,我观察到了这一点。每当我第一次查询git时,它需要的时间比遵循相同命令的查询要多得多:

 @Html.TextBoxFor(model => model.FileData, new { type = "file" })

我的问题是:git是否在其内部实现中使用了某种缓存?如果是,那么.git / *目录中的那些缓存结果会被存储?或者它与git无关,还是依赖于我正在使用的平台。

1 个答案:

答案 0 :(得分:2)

是和否。

您展示的片段暗示您在某些Unix-y平台上,如某些基于GNU / Linux或* BSD的操作系统或Mac OS。这些平台通常具有良好的文件系统缓存功能,因此下次Git扫描您的工作树时,许多/大部分信息都是从主内存而不是磁盘提供的。

另一方面,在Windows上,Git想要执行的文件系统操作很慢,它的ptalform端口Git for Windows有一个由core.fscache configuration knob控制的特殊功能。此功能实际上为工作树中的文件实现了所谓的“stat”信息的实际内存缓存。

此缓存是-AFAIK-in-memory,因此它不会存储在任何地方。

另外需要注意的是,所谓的“索引” - 您为下一次提交暂存更改的特殊位置,以及git commit创建的下一次提交被切断的特殊位置实际上是一个特殊的缓存,在Git的早期,它被称为那种方式。一些Git命令仍然支持--cached命令行选项,这使得他们只考虑引用git help cli手册的索引:

  

关于常见的混淆选项的说明

     

许多可以处理工作树和/或文件中的文件的命令   在索引中可以选择--cached和/或--index。   有时人们错误地认为,因为索引是   最初称为缓存,这两个是同义词。   它们不是 - 这两个选项意味着非常不同的东西。

     

--cached选项用于通常询问命令   适用于工作树中的文件,仅适用于索引。   例如,git grep,在没有提交指定的情况下使用   从中查找字符串的提交,通常适用于文件   在工作树中,但使用--cached选项,   它在索引中查找字符串。

     

--index选项用于通常询问命令   适用于工作树中的文件也会影响索引。   例如,git stash apply通常会合并记录的更改   在工作树的藏匿处,但使用--index选项,   它也会将更改合并到索引中。

     

git apply命令可与--cached--index一起使用   (但不是在同一时间)。通常命令只影响   工作树中的文件,但--index,   它会修补文件及其索引条目,   使用--cached,它只修改索引条目。

这种情况下,暂存区域实际上是“缓存”源于此 Git最初被设想为所谓的实现 “内容可寻址的文件系统”刚刚设法迅速超越 这个想法成为围绕这个核心理念构建的成熟VCS。 缓存将保存即将记录为下一个文件系统的条目 用于快速访问的快照(提交)。即使在今天也是如此:指数 保持git status的暂存文件的“统计”信息有效 快速跳过实际计算文件上的哈希值似乎没有 与索引中的内容相比,在工作树中进行了更改。

请参阅Git SCM wiki上的"Git History"页面,并在此处查找“缓存”一词: 它很好地解释了该指数的历史背景。

最重要的是,这里有多个不同的缓存:操作系统的文件系统缓存,Git自己的缓存以及启用时特定于Windows的缓存。

只有索引实际上是“存储”的:没有特殊配置调整的股票Git thiis是位于“.git”子目录下的名为“index”的文件。