什么是git-cache,git-cache中存储了什么?

6

实际上,我读了很多关于Git的内容。

我知道可以通过git rm --cached .命令来删除缓存,但我不理解“git-cache”的概念。

缓存是什么?GIT中缓存的位置在哪里?这个缓存是存储在RAM还是文件中?缓存是否用于提高GIT的性能?

缓存中存储了什么?


1
考虑一个Git教程——了解它是什么,以及如何使用它,对于使用Git非常重要。在这个上下文中,“缓存”包含“暂存的更改”。内容存储在磁盘上,在repo的.git文件夹中。 - user2864740
1
这个回答解决了你的问题吗?“将文件添加到索引”在Git中真正意味着什么? - mkrieger1
2
尽管命令选项名为“cached”,但你所询问的东西被称为“index”。 - mkrieger1
1
git-rm 的文档中写道:“使用[--cached]选项仅从索引中取消暂存并删除路径。无论是否修改,工作树文件都将保持不变。” --cached 选项也适用于其他命令,如 git diff,这非常有用。 - user2864740
1个回答

10
Git是一个历史悠久的(15+年)程序,有许多部分和一些术语,其中并不是所有术语都很好理解。表达式“cache”,以及标志的拼写为“--cached”,就是其中之一。这个实体最“现代”的术语是“staging area”,反映了你如何使用它,但在Git中这个实体最“常见”的术语是“index”。
因此,一般来说,如果某人或某物提到索引、暂存区或缓存,他们可能指的是同一件事:
“在git中缓存的位置在哪里?”
使用“git rev-parse --git-dir”查找Git目录。在Git目录中,查找名为“index”的文件。但在此之前,请检查环境变量“$GIT_INDEX_FILE”:如果设置了该变量,请尝试使用该路径名。
在shell中,它位于文件中:
ls -l ${GIT_INDEX_FILE-$(git rev-parse --git-dir)/index}

这个文件可能存在,也可能不存在;如果它不存在,那么目前没有索引并且缓存为空。
这里假设使用/bin/sh或兼容语法;一些shell可能有不同的结构。

这个缓存是存储在RAM还是文件中?

正如我们刚才看到的,它存储在一个文件中。 但是,Git在读取这个文件后,它就在RAM中(以内存中最有用的格式,与其在磁盘上的外观通常不同)。 文件本身可能包含指令,指示Git的部分读取其他文件。

缓存在Git中用于提高性能吗?

是的:作为缓存,它的目的是提高性能。 但是,索引的角色不仅仅是“作为性能提升的缓存”。 它的主要作用是“暂存区”,因此被称为“暂存区”。 它还在解决冲突合并方面发挥着重要作用,对于这一点,只有通用术语“索引”有用。 (即使这个词“索引”也没有传达任何真正的信息。 从某种意义上说,这实际上是件好事,因为文件的内容在Git的未来版本中可能会更改。)

我知道可以使用git rm --cached .命令删除缓存

这并不是删除缓存本身。它从缓存中删除条目(即使它们在内部可能仅被标记为“已删除”),还有一些磁盘扩展可以保留一些条目,以便在需要时重新生成。

什么是缓存?

作为计算机领域的通用术语,它是非常泛化的

缓存中存储了什么?

Git源代码包含了一个详细 技术文档。您可以使用 git ls-files --stagegit ls-files --debug 命令查看其运行情况。


网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接