我对 Git 中的暂存目录(Git Index)的命名感到困惑。
叫Index有什么特殊含义吗?
为什么不直接称为Cache/或Temp目录以便我们更容易理解呢?
对我来说,索引可以帮助我们更快地搜索内容,就像 DBMS 中的索引一样,
它与暂存区有什么关系???
我做了一些谷歌搜索,但仍然没有太多想法。
参考链接Git 索引 http://book.git-scm.com/7_the_git_index.html
The article by the main Git maintainer Junio C. Hamano http://gitster.livejournal.com/39629.html, is instructive, for grasping the difference between cache and index:
(emphasis mine)
当 Linus 开始编写 git 时,他的目标是让他能够重现他在 BitKeeper 时代之前使用的原始“tarball 和补丁”工作流程生成的每个中间状态。
从 2.6.12 tarball 开始,他对 patch-1、patch-2 等进行排队,因此 2.6.12 本身、应用了 patch-1 的 2.6.12、应用了 patch-1 和 patch-2 的 2.6.12,变成三个版本。
但如果你每天必须洗牌数百个补丁,那么这显然无法扩展。于是他发明了“目录缓存”;作为一个概念,这大致对应于当今 git 中的“树”对象:记录的集合,每个记录都是整个目录结构所包含内容的紧凑表示。
构建的方式是“将内容添加到缓存中,或者更新缓存中的内容”。
托管此类版本控制记录集合的控制目录被命名为“.dircache
”(已更名为“.git
“ 一段时间后)。
有一个文件名为“.dircache/index
”,并且该文件的内容在 C 语言中的一组变量中被读取和操作,这些变量以名词命名,“cache
".
那时,我们今天所说的索引的概念,一个缓冲区,用于构建您打算作为树对象写出的内容的集合,被称为“缓存”.
每个人都交替谈论“缓存”和“索引”,因为“缓存”和“索引”是记录“缓存”中内容的文件。cache
“被命名为”index
“。它曾经是(现在仍然是)索引允许您通过给定路径名来查找缓存中的内容.
随着越来越多的人开始使用 git 而无需阅读其代码,“索引”一词的使用变得更加普遍,原因显而易见。
作为文件系统上的东西,它比 C 源代码中的变量名更明显。
最终,在向最终用户解释 git 的使用时,我们不再使用“缓存”作为名词来命名我们今天所说的“索引”。
然而,当我们想在讨论 git 实现的上下文中讨论内部数据结构时,“缓存”这个词仍然用作名词(例如“让程序能够同时使用多个缓存”)。
在最终用户层面,如今“缓存”仅用作形容词; “缓存”,意思是“缓存在索引中的内容,而不是工作树中的内容”。
我们可以将其称为“索引”,但“缓存内容”从很早起就是一个已经确立的短语,表示确切的概念,我们不需要另一个表示相同含义的词。
[...] 早期,“向索引添加新文件”和“用新内容更新索引中已有的文件”之间存在区别。
[...] 现代(和中世纪)版本的 git 使用“git add
“对于两者来说。我们本可以诚实地称之为更新或添加到索引的行为”add
”,但“git 培训”行业的一些人开始将索引教授为“下一次提交的暂存区域”,并且不可避免的结果是,动词“to stage”开始出现在许多文档中,意思是“将内容添加到索引”。
我自己有时也会使用这个动词,但那只是当我怀疑观众可能是从这些新人那里先学会了 git 的时候。严格来说,这是 git 词汇中一个多余且相当新的词。
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)