以战代练 Git内幕研究(一)

1,plumbing
2,.git目录结构

– 一般
description 一般都是描述,不是很重要
config git项目的所有配置项
info 包含了我们不需要git追踪的排除掉的文件(exclude)
hooks 钩子,配合自动部署/自动构建
– 重要
head 指向了我们当前所处的分支指针
index 存储了暂存区的内容
objects 存储了git中所有的数据
refs 存储了所有的指针(包括branch、tag、remote)

3,底层命令

(1)git hash-object #接受一个value,然后返回SHA-1 hash值(40位)
例如:
echo ‘hello’ | git hash-object -w --stdin
如果不加–stdin的话,就要加上一个文件名

(2)git存储机制:
40位hash值,前2位作为文件夹名称,后38位作为文件名

(3)git cat-file #查看存储到git中的文件内容
例如:
git cat-file -p 38位hash值 #查看存储文件内容
git cat-file -t 38位hash值 #查看存储文件类型,blob类型
git cat-file -p master^{tree}

(4)find .git/objects -type f #查看.git/object中的所有文件

(5) git update-index --add --cacheinfo 100644 40位hash值 文件名
例如:
git update-index --add --cacheinfo 100644 83bddddd… test.txt
解释:
git update-index #将数据库中存储的某个blob数据的引用放到暂存区中
–add #因为暂存区中没有这个文件
–cacheinfo #不是从工作区中加入文件,是从git仓库(git数据库)加入文件
100644 #表示这是一个普通的文件

(6)git write-tree
创建一个tree object,将数据库内容的引用放入到暂存区

相当于基于暂存区中当前所有文件的版本(引用),创建一个快照

(7)git commit-tree
会生成一个commit object
commit object 包含:tree object、作者、提交人、备注等信息
可以理解为tree object就是项目当前的一个完整快照

(8)总结:
git add --add . === git update-index
git commit === git write-tree && git commit-tree

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值