git暂存区
发表于:2025-02-24 作者:千家信息网编辑
千家信息网最后更新 2025年02月24日,我们知道git commit提交命令是基于暂存区的,如果修改了工作空间的内容,必须使用git add /git rm等把修改添加到暂存区,否则无法提交。在.git目录下有个index文件,这个就是暂存
千家信息网最后更新 2025年02月24日git暂存区
我们知道git commit提交命令是基于暂存区的,如果修改了工作空间的内容,必须使用git add /git rm等把修改添加到暂存区,否则无法提交。
在.git目录下有个index文件,这个就是暂存器文件,当我们使用修改暂存区命令的时候,这个文件就会更新。
1.暂存区的内容
暂存区中存储的是git blob对象的引用,以及blob对象的一些路径信息。我们可以使用 git ls-files --stage
$ git ls-files --stage100644 72943a16fb2c8f38f9dde202b7a70ccc19c52f34 0 fas.txt100644 f910c723c9bbc92b2d61c094859e68bbf7215ab2 0 hello.txt100644 b08a2810d8a4542f350f650435f506c6c81ca9b2 0 src/hello.txt
2.暂存区二级制分析
当我们使用notepad++使用十六进制格式打开该文件,内容如下:
其对应的格式为:
| 0 | 4 | 8 | C | |-----------------------|----------------------|------------------------|----------------------|0 | DIRC | Version | File count | ctime ... | 0 | ... | mtime | device |2 | inode | mode | UID | GID | 2 | File size | Entry SHA-1 ... |4 | ... | Flags | Index SHA-1 ... | 4 | ... |
- 44 49 52 43: DIRC. 固定的头部
- 00 00 00 02 :格式版本
- 00 00 00 03:暂存器文件的个数,我们有三个
后面的内容是每一个文件的信息列表。如果有多个文件则依次按照下面的顺序读取
- ctime:占八位,是文件的创建时间。
- mtime:占八位,是文件的修改时间
- 四个字节的device,inode,mode,UID,GID.这些属性是为了不用比较文件内容,更好的检测文件是否变更。
- File size:四个字节的文件大小。
- Entry SHA-120:个字节的blob对象的ID(SHA-1),指向git的blob对象。
- Flag对象占用四个字节,也就是32bit位。其中第一个bit位为是否有效标志,第二个bit位为扩展标志位。第三和第四bit位表示该暂存块的状态,主要表示合并的状态。 0:正常文件状态没有合并冲突1 : base 2: ours 3: theirs。第五到第十六bit位表示文件的路径长度,例如值是00 07,那么表示后面的七个字节都是路径信息。后面的两个字节只有在第二个bit为为扩展的时候才存在。
- 文件名和路径信息:其长度取决于Flag对象中的第五到第十六bit位的值。其中的路径信息使用utf-8编码(默认,最好不要修改),例如保存的路径为"临时目录/hello.txt",那么其二进制结果为"e4 b8 b4 e6 97 b6 e7 9b ae e5 bd 95 2f 68 65 6c 6c 6f 2e 74 78 74"。
String s = "临时目录/hello.txt"; byte[] bytes = s.getBytes("utf-8"); for (byte b : bytes) { System.out.print(Integer.toHexString(b & 0xFF) + " "); } 输出:e4 b8 b4 e6 97 b6 e7 9b ae e5 bd 95 2f 68 65 6c 6c 6f 2e 74 78 74
- 后面跟着1-8个字节的00,为了文件的索引内容的个数是8的倍数,这个是必须有的,至少有1个,如果文件的内容恰好是8的倍数,那么就会有8个00字节。
最后的二十位为以上内容的校验和。
参考:https://stackoverflow.com/questions/4084921/what-does-the-git-index-contain-exactly
3.为什么存在暂存区
分段提交,可能不想把整个工作空间的修改内容提交,加入暂存区就可以分段提交
https://www.zhihu.com/question/19946553
文件
内容
存区
字节
对象
路径
信息
格式
状态
目录
个数
倍数
命令
时候
时间
标志
空间
长度
utf-8
工作
数据库的安全要保护哪些东西
数据库安全各自的含义是什么
生产安全数据库录入
数据库的安全性及管理
数据库安全策略包含哪些
海淀数据库安全审计系统
建立农村房屋安全信息数据库
易用的数据库客户端支持安全管理
连接数据库失败ssl安全错误
数据库的锁怎样保障安全
软件开发中的代码怎么封装
手机软件开发时间
数据库中分组的sql语句
网络安全什么是理论安全
安卓软件开发制作音乐播放器
软件开发苏州常州哪个好
怎样用cad建立数据库呢
数据库实验教程实验5
数据库好还是后台好
致成网络技术有限公司怎么样
互联网科技资料英文
西藏智慧城管软件开发
白板软件开发商
广东服务器电源充电方法
创建数据库tsql语句
数据库语言有哪些
软件开发 cram
服务器运算优化
可以到哪个数据库查找
bim数据库生产
公司服务器ip地址
vc 软件开发
软件开发工程师课程
360浏览器配置dns服务器
网络广播系统服务器软件
域名服务器托管
数据库lbn
英华在线手机端无法连接到服务器
h3c服务器配置管理口
腾讯课堂运用网络技术