我对Git中登台目录(Git Index)的命名感到困惑。
是否有任何特殊含义,称为索引? 为什么不调用Cache /或Temp目录以便我们更容易理解?
对我来说,索引是帮助我们更快地搜索的东西,比如DBMS中的索引, 它与临时区域有什么关系?
我做了一些谷歌搜索但仍然没有太多想法。 ref link Git Index
答案 0 :(得分:22)
article by the main Git maintainer Junio C. Hamano对于掌握缓存和索引之间的差异具有指导意义:
(强调我的)
当Linus开始编写git时,他的目的是让他重现他在BitKeeper之前使用的原始“tarball and patches”工作流程所产生的每个中间状态。
从2.6.12 tarball开始,他排队patch-1,patch-2,... so 2.6.12本身,2.6.12应用patch-1,2.6.12同时应用patch-1和patch-2,成为三个版本。但如果你每天必须洗掉数百个补丁,那么这个问题就无法明显扩展。于是他发明了“目录缓存”;作为一个概念,这大致对应于今天的git中的“树”对象:一组记录,每个记录都是整个目录结构所包含的紧凑表示。
构建它的方法是“将内容添加到缓存中,或更新缓存中的内容”。托管此类版本控制记录集合的控制目录名为“
.dircache
”(一段时间后重命名为“.git
”。)
有一个名为“.dircache/index
”的文件,该文件的内容是在C中以名词“cache
”命名的一组变量中读取和操作的。
那时候,我们今天称之为索引的概念,一个缓冲区来构建你打算写成树对象的内容集合,被称为“缓存”。
每个人都可以互换地谈论“缓存”和“索引”,因为记录“cache
”中的内容的文件被命名为“index
”。它(并且仍然是)索引允许您通过为其提供路径名来查找缓存中的内容。随着越来越多的人开始使用git而不必阅读其代码,出于显而易见的原因,使用“index”这个词变得更加普遍。 作为文件系统上的东西,它比C源代码中的变量名更加明显 最后,当我们解释使用git作为最终用户时,我们停止使用“cache”作为名词来命名我们今天所谓的“索引”。 当我们想在讨论git实现的上下文中谈论内部数据结构时,“cache”这个词仍被用作名词(例如“让我们让程序可以使用超过一个缓存同时“)。
在最终用户级别,“缓存”目前仅用作形容词; “缓存”,意思是“内容缓存在索引中,而不是工作树中的内容” 我们本可以称之为“索引”,但“缓存内容”是一个已经确定的短语,从很早就意味着确切的概念,我们不需要另一个意思相同的词。
[...]在早些时候,“向索引添加新文件”和“使用新内容更新索引中已存在的文件”之间存在区别。
[...]现代(和中世纪)版本的git使用“git add
”。我们本来可以诚实地称之为更新或添加到索引“add
”的行为,但是“git training”行业的一些人开始将该指数教授为“该指数的中转区域”。下一次提交“,作为一种不可避免的后果,动词”到舞台“开始出现在许多文档中,意思是”向索引添加内容的行为“。
我有时会自己使用这个动词,但只有当我怀疑观众可能首先从这些新人那里学习git时。严格来说,这是git词汇表中一个多余且相当新的词。