.git/index是一个包含文件索引的目录树,如同一个虚拟的工作区,记录文件名和文件的状态信息(时间戳、文件长度等),文件内容则保存在git对象库.git/objects目录中通过文件索引建立文件和对象库中对象实体之间的对应关系。
执行git status或git diff命令扫描工作区改动时,先根据.git/index文件中记录的时间戳、长度信息判断工作区文件是否改变,若时间戳改变,则说明文件内容可能改变了,需要打开并读取文件内容,与更改之前的原始文件比较判断。若文件内容无更改,则将该文件新的时间戳记录到.git/index中。因此,首先通过时间戳、文件长度进行文件比较,比直接取内容更快速,使得Git更高效。
相关命令
- git checkout -- welcome.txt 撤销工作区中welcome.txt文件尚未提交的修改
- git status -s 状态输出查看工作区变动,若版本号小于1.7.3,则执行git diff
- ls --full-time .git/index 查看.git/index文件(包括其时间戳)
- touch welcome.txt 更改时间戳,不改变内容
- git diff 工作区和暂存区比较
- git diff --cached 暂存区和HEAD比较
- git diff HEAD 工作区和HEAD比较
- git stash 保存当前工作进度
- git命令与工作区、暂存区及版本库的关系