标签:

前一篇blog在实践过程有意无意地透漏了“暂存区”的概念。为了避免用户被新概念吓坏,在暂存区出现的地方又同时使用了“提交任务”这一更易理解的概念,但是暂存区(称为stage或index)才是其真正的名称。

在版本库 .git 目录下有一个index文件,下面针对这个文件做一个有趣的试验。具体操作步骤如下:

1. 首先执行 git checkout 命令(后面再介绍此命令),撤销工作区中 welcome.txt 文件尚未提交的修改。

$ git checkout -- welcome.txt

$ git status -s

2. 通过状态输出可以看到工作区已经没有改动了。查看一下 .git/index 文件,注意该文件的时间戳为:2014-12-20 10:26:20

$ ls --full-time .git/index

-rw-rw-r-- 1 fuhd fuhd 112 2014-12-20 10:26:20.550111224 +0800 .git/index

3. 现在更改一下welcome.txt的时间戳,但是不改变它的内容。然后再执行git status命令,查看.git/index文件的时间戳为:

2014-12-20 10:45:15

$ touch welcome.txt

$ git status -s

$ ls --full-time .git/index

-rw-rw-r-- 1 fuhd fuhd 112 2014-12-20 10:45:15.550077688 +0800 .git/index

看到了吗?时间戳改变了!

这个试验说明当执行 git status 命令(或者 git diff 命令)扫描工作区改动的时候,先依据 .git/index 文件中记录的(用于跟踪工作区文件的)时间戳,长度等信息判断工作区文件是否改变,如果工作区文件的时间戳改变了,说明文件的内容可能被改变了,需要打开文件,读取文件内容,与更改前的原始文件相比较,判断文件内容是否被更改。如果文件内容没有改变,则将该文件新的时间戳记录到 .git/index 文件中。因为如果要判断文件是否更改,使用时间戳,文件长度等信息进行比较要比通过文件内容比较要快得多,所以Git这样的实现方式可以让工作区状态扫描更快速执行,这也是Git高效的原因之一。

文件.git/index 实际上就是一个包含文件索引的目录树,像是一个虚拟的工作区。在这个虚拟工作区的目录树中,记录了文件名和文件的状态信息(时间戳和文件长度等)。文件的内容并没有存储在其中,而是保存在Git对象库.git/objects目录中,文件索引建立了文件和对象库中对象实体之间的对应。下图展示了工作区,版本库中的暂存区和版本库之间的关系:

标签:

git stage 暂存_Git暂存区之理解Git暂存区(stage)相关推荐

  1. git idea 图形化_Git大全,你所需要的Git资料都在这里

    不管怎样,Git已经成为事实上的版本管理工具的王者,之前的CVS被SVN吃掉了,现如今SVN的大好河山也被Git蚕食了大半,作为开发者的你,如果还不能够熟练的使用Git来管理你的代码,后果将会很严重, ...

  2. git add 回滚_Git的reset命令详解

    git reset 这个命令是版本控制的精髓,非常实用且常用,真香警告! 一.为什么 我们玩闯关游戏的时候,经常要把游戏进度保存,以便我们随时能够回到那一刻.特别是打BOSS之前,做好保存,发现打不过 ...

  3. git stage 暂存_Git撤销暂存区stage中的内容

    $ git add readme.txt提交到了stage中. $ git status On branch master Changes to be committed: (use "gi ...

  4. git学习(四):理解git暂存区(stage)

    与一般的版本管理不同的是,git在提交之前要将更改通过git add 添加到暂存区才能提交(git commit).即使是已经交给了git来管理的文件也是如此.这里继续学习git的暂存区. 通过git ...

  5. Git复习(九)之理解git工作区和暂存区

    前言 Git和其他版本控制系统如SVN的一个不同之处就是有暂存区的概念. 版本库 在工作区目录中有一个.git文件,这个其实不是工作区而是Git的版本库 版本库中包含两个部分,一个是暂存区index/ ...

  6. 对Git暂存区的理解

    在使用git的项目中,有个隐藏目录.git,这个是git的版本库. git的版本库中存了很多东西,其中就包括git暂存区也即称为stage(或index)的暂存区. 使用git后,git会自动为我们创 ...

  7. git 取消 所有暂存_Git版本管理完全指南—学好Git一文足矣

    开心?一下 image.png 第一部分 命令行 1.分支操作 1. git branch 创建分支2. git checkout -b 创建并切换到新建的分支上3. git checkout 切换分 ...

  8. 【原创】关于Git暂存区的理解

    关于Git暂存区的理解      暂存区可以说是Git的三大重要的区域之一,另外两个分别是工作目录和Git仓库,所以说对暂存区的深入理解可以帮助我们理解很多Git命令背后隐藏的工作原理.今天,本文将以 ...

  9. git查看分支记录_git原理

    标准用法请参考git-scm.本文记录笔者对git的一些理解,如有错误,欢迎指正. 引用内容已用markdown记号标出.版权所有,转载请注明出处. 文章完成中 这是引用内容 First Editio ...

最新文章

  1. transformcontrols可以用在group上吗_电缆沟盖板可以用在水沟上吗
  2. mySQL建表允许最多多少字段?
  3. 2015年第六届蓝桥杯C/C++ A组国赛 —— 第一题:方格填数
  4. 在windows 实现执行 makefile
  5. b样条和三次样条_样条曲线
  6. java aio聊天_JAVA aio简单使用
  7. 使用ant design Pro开发项目的小结
  8. hibernate native oracle,hibernate native 主键生成策略
  9. Android逆向笔记-使用dnSpy修改C#的dll(安卓游戏中使用资源不减反加)
  10. 多传感器融合SLAM研究和学习专栏汇总
  11. java 交互式 shell_Java9 Shell工具(JShell)
  12. linux下安装java
  13. Sql Server 增加字段、修改字段、修改类型、修改默认值
  14. python有道自动翻译_python爬虫之有道在线翻译
  15. T0、T1、TS、D1是什么鬼?一文看懂POS机刷卡到账模式区别和利弊
  16. java使用谷歌邮箱发送邮件
  17. 美术文献杂志美术文献杂志社美术文献编辑部2022年第7期目录
  18. 从头开始训练一个依存分析器
  19. skyeye linux qt,Ubuntu 16.04上安装SkyEye及测试
  20. 微信订阅号申请流程及准备材料

热门文章

  1. 【工程/物理光学(四)——光的衍射技术】
  2. 向量学习过程思想总结概括
  3. 【Excel提取数字】用5个简单公式从混合文本中提取数字
  4. 信息传输速率与传信率_数据、信号、码元传输速率和信息传输速率等概念
  5. android虚拟按键
  6. 【原创】企业级Linux环境部署(很全、很细)
  7. The types of the interface org.apache.flink.util.OutputTag could not be inferred.
  8. java在线截图_JAVA之网页截屏
  9. 今天发现一个好的修图软件
  10. Windows64Adobe2019/2019全家桶