git暂存区
发表于:2025-01-22 作者:千家信息网编辑
千家信息网最后更新 2025年01月22日,我们知道git commit提交命令是基于暂存区的,如果修改了工作空间的内容,必须使用git add /git rm等把修改添加到暂存区,否则无法提交。在.git目录下有个index文件,这个就是暂存
千家信息网最后更新 2025年01月22日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安全错误
数据库的锁怎样保障安全
ci框架条件查询数据库
软件开发迭代模型的缺点
软件开发公司在哪能看到
深圳市鸿扬互联网科技有限公司
浙江省网络安全考研学校
湖北中国联通dns服务器云空间
电脑电信网络安全平台登录入口
璐璐数据库
四川浪潮服务器虚拟化安装
正能量网络技术
无锡ibm服务器维修多少钱
武汉系统软件开发哪家好
管家婆软件云数据库地址在哪
闻道网络安全
软件开发产品服务架构
在国企做软件开发
有没有学生版的AI服务器
开发服务器安全组
开展网络安全主题班会的班会总结
贸易网络安全约
涂胶机点胶软件开发
小学生网络安全海报手绘钓鱼
qt 数据库 导出
四川大学网络安全与法学怎么样
长虹电视怎么连不上服务器
为什么软件要开发数据库
四川电商软件开发有用吗
网络安全发展未来发展趋势
网络服务器怎么联系啊
崇明区网络技术开发怎么样