git术语解释staging,index,cache

当我在使用git的时候,有三个东西的出现,一度让我非常困扰,就如题所述,staging,index,和cache。

比如,当我阅读git官网提供的电子书《Pro Git》的时候,最初一章里,就提到,文件在git里面,有三种状态,working copy,staging area,和 in repository。而在读一些man pages的时候,比如git-reset命令,又会看到index,这非常让人困扰。而git-rm 指令又有一个参数叫 -cached,其作用是”unstage and remove paths only from the index”,更加奇怪了,同时提到了stage和index,而参数名竟然是cached!!!

这三者的来龙去脉到底怎么回事?搞清楚这些问题,对于喜欢刨根究底的我来说,极其重要。通过谷歌,我找到了一个叫Junio C Hamano的日本小哥,他是git的核心维护者之一,讲述了这三者的故事。本文主要内容从那个文章中解读出来,添加了一些自己的理解,不感冒的同学,请直接阅读原文。

读完原文后,我的基本感觉是,这些都是Linus大神当时的一念之差和命名的随意性搞出来的问题。

原来,Linus当年在维护Kernel的时候,使用了一种叫做“tarball and patches”的工作流模型(什么鬼?),具体原理没搞懂,我理解的意思,他要研究每个Kernel的patch对Kernel到底有什么影响。例如,他有一个2.6.12的tarball,还有 patch-1,patch-2 两个,所以,他至少要弄出来三个新版本,2.6.12-patch1,2.6.12-patch2,2.6.12-patch1&2。区区两个patch就搞出了3个新版本,如果patch多了不堪重负。

于是,他发明了一个“目录缓存(directory cache)”,其实就是现今git中的tree的概念,这个tree上的每个节点,都是一个Kernel的整个目录结构和文件(用一种高度压缩的形式表示的)。构建这个tree的方法,就是将内容添加到“缓存cache”,或者“更新缓存cache中的内容”。

用来存储这个树状结构的目录,叫“.dircache”(现在叫“.git”)。这个目录里,有个文件叫index,在git源码里(用C写的),操作这个index的各种变量名称,都有个前缀叫“cache”。这个index文件的作用,就是决定你要将什么文件,最终写入到那个树状结构里的,index就是暂存用的缓冲区。(可以看出来,这个树状结构,其根本作用就是维护海量的版本,其实就是git版本库本身了)(开发团队里的)每个人,都混用cache和index两个词,因为记录缓冲区(cache)内容的文件名,叫index。如果你给定文件路径,就能从index文件中找出来你要提交的内容(现在依旧如此)。

现在,越来越多的人,不需要通过阅读git的源码,就可以使用git了(因为有了文档和很多书籍,从应用层面介绍了很多的git知识,所以不需要从源码里找到所有秘密了:D)。所以,index这个名字变得越来越流行,因为这个文件会出现在.git目录里,而源代码里,cache开头的那些变量却不为人知。最终,我们(git开发团队)不再使用cache这个单词给小白用户(End User)解释问题了,但是当我们讨论git内部数据结构和git实现的时候,还是会用到cache这个词。

对于小白用户来说,现在 cache 这个词都以过去分词 cached 的形式出现,其词性是形容词了。表示要讨论的内容目前位于index文件中,而不是在工作目录(work tree)里面。(假如,我在工作目录里修改了一个文件,使用 git-add 命令,我修改的部分内容 —— 相当于一个patch —— 会在index里出现,但是在我的工作目录里,当然也还是有我修改的内容的,不过是叠加在版本库中的文件上的)。当然,我们也可以用 “indexed” 这个词,但是 “cached contents”,在英语里是个词组,早已存在,表达的就是这个意思,所以我们不需要再发明一个词来说明这个意思,就用了cached了(我了个去啊 >-

时间: 2024-12-28 01:36:24

git术语解释staging,index,cache的相关文章

kafka深入研究之路(2) kafka简介与专业术语解释说明

目录:1.kafka简介 什么是kafka? 设计目标是什么?2.kafka的优缺点3.kafka中专业术语解释说明 官方网站: http://kafka.apache.org/introkafka中文教程 http://orchome.com/kafka/index 1/ kafka 简介Kafka是最初由Linkedin公司开发,是一个分布式.分区的.多副本的.多订阅者,基于zookeeper协调的分布式日志系统(也可以当做MQ系统),常见可以用于web/nginx日志.访问日志,消息服务等

刨根究底字符编码之二——关键术语解释(下)

关键术语解释(下) 一.第1层 抽象字符表ACR (Abstract Character Repertoire抽象字符清单):明确字符的范围(即确定支持哪些字符) 1. 抽象字符表ACR是一个编码系统支持的所有抽象字符的集合,可以简单理解为无序的字符集合,用于确定字符的范围,即要支持哪些字符. 抽象字符表ACR的一个重要特点是字符的无序性,即其中的字符并没有编排数字顺序,当然也就没有数字编号. 2. "抽象"字符不具有某种特定的字形,不应与具有某种特定字形的"具体"

【SSO单点系列】(6):CAS4.0 单点流程序列图(中文版)以及相关术语解释(TGT、ST、PGT、PT、PGTIOU)

CAS 相关的内容好久没写了,可能下周会继续更新一些内容吧. 在上一篇中的单点流程序列图由于是从官网直接下载来的,上面都是英文,可能有的朋友看不懂,因此修改成中文的. PS:只修改了一个,第二个图明天在加... 在这之前,先解释几个CAS 相关的术语解释吧: 1.概念相关 ①.术语解释 TGT.ST.PGT.PGTIOU.PT,其中CAS1.0协议中就有的票据,PGT.PGTIOU.PT是CAS2.0协议中有的票据. CAS为用户签发的登录票据,拥有了CAS成功登录过.CAS认证成功后,TGT对

js术语解释

浏览器嗅探(browser sniffing):通过js获取浏览器的名称和版本. 对象检测(object detection):检查用户代理是否支持一定的对象,并使之成为关键的区分标准. 文档对象模型(Document Object Model, DOM):每个浏览器都提供了显示并用来操作的文档,这种操作通过文档对象模型来实现. 渐进增强(progressive enhancement):一种实践,它只面向那些能够看到并且使用的用户提供功能,从最低的公共特性开始,然后检测用户是否支持不断提升的特

spss C# 二次开发 学习笔记(二)——Spss以及统计术语解释(IT人眼中的统计术语)

针对客户需求,需要对一些数据做统计分析.统计分析的第一步,即为数据查询,查找出要统计分析的数据. 查询得出的是一个行列表格的结果集,行.列.表格等这些IT的数据库概念和Spss以及统计中的术语是如何对应的,这点是刚接触统计这方面的我首先要理清楚的. 变量(Variable)——结果集中的列.可以为数据库表字段,当然也可以使使用函数处理后的,即为表达式. 变量的类型分为字符型和数值型,有长度设置,对于数值有精度设置. 数值型,有数值和数值标签一说,例如性别,如果为字符型,则值为男或者女,如果为数值

刨根究底字符编码之一——关键术语解释(上)

声明:本系列文章参考了网上的大量资料,除了少部分资料由于未作大量修改(但基本上也有少量修改,因为网上文章随意性较大,很多明显的笔误或前后矛盾之处,如若不改反而让人迷糊)而标明了原作者和出处之外,其余由于基本上已按自己的理解作了大量改写,因此没有再一一予以说明,在此对原作者表示歉意并感谢.另外,文中图片来自网络,也不在一一说明.同时,文中若有错漏,还请直接招呼板砖,不用客气. 关键术语解释 位: 即比特(Bit),亦称二进制位.比特位.位元.位,指二进制数中的一位,是计算机中信息表示的最小单位.B

听力|术语解释原则|转折原则|提问原则|并列

术语解释原则,记录时使用利用辅音进行分层. 转折原则,但是存在的问题是转折前后有部分听不清,不是听不清转折前就是听不懂转折后,此时应该通过明确信息走向来判断未知信息.常见于重听题:Hugo is a brilliant writer,but/yet/however his work XXX isn’t a great play. Signal: But/yet/however Although/though/despite (问答场景下)well...interesting,but 画外音: Y

JAVA初步——环境搭建和专业术语解释,helloworld程序编写小结

Java编程语言初体验 一.前言 相关专业术语简介 1.软件开发--即一系列按照指定顺序组织的计算机数据和指令的集.合.分为系统软件和应用软件. 2.人机交互方式:命令行(Linux系统).图形化界面(Windows) 3.常用的DOS命令:使用窗口键+r打开,输入cmd按回车/确定可以进入DOS界面 dir: 列出当前目录下的文件以及文件夹md: 创建目录rd: 删除目录cd: 进入指定目录cd.. 退回到上一级目录cd\: 退回到根目录del: 删除文件exit:退出dos命令行 4.计算机

IOS开发网络篇—SDK API IDE专业术语解释

API文档Application Programming Interface(应用程序接口)   reference 参考文档 Documentation  程序说明书 SDK (Software 软件 Development 开发 Kit)软件开发包 IDE 集成开发环境(integrated development environment)软件中的意思 IDE 电子集成驱动器(Integrated Drive Electronics)  相对硬件的意思 一.什么是SDK? SDK(Softw