git原理一:.git文件探索

开始介绍.git目录之前,我们要知道,在Git中,有4种很重要的对象。分别是Blod对象,Tree对象,Commit对象以及Tag对象。
首先创建一个index.html文件,内容是“hello,5xRuby”。使用git add命令加入到暂存区。把文件加入到暂存区之后,Git便会在.git目录生成一个Blob对象。这个Blob对象用来存放index.html文件的“内容”。这里的内容并不是把整个index.html文件搬到.git目录。
我们使用git hash-object命令来计算Blob对象的SHA-1值

 echo "hello,5xRuby"|git hash-object --stdin

在这里插入图片描述
接着Git就会在.git/objects目录存放文件。Git会用这40字的SHA-1值的前两个字作为目录,剩下的38字是文件名。在这里插入图片描述
因为文件是已经经过压缩的,所以一般的编辑器是看不出内容的,使用git cat-file命令来查看

 git cat-file -t 2b9ca41e8b207934a039f2c325572c3a536e7c52

在这里插入图片描述
-t参数是表示要查看的SHA-1值所代表的对象的形态。根据结果,GIt生成的SHA-1值代表是一种Blob对象。使用-p参数,则可以看到SHA-1值所指的那个对象的内容

git cat-file -p 2b9ca41e8b207934a039f2c325572c3a536e7c52

在这里插入图片描述
由此知道
1、当使用git add命令的时候,Git会根据这个对象的内容计算出“SHA-1”值
2、Git接着会使用SHA-1值的前2个字节作为目录名称,后38个字节作为文件名,创建目录和文件放在.git/objects目录下
3、文件的内容是Git使用压缩算法把原本的“内容”压缩之后的结果
接下来我们新创建一个目录,空目录不会被追踪

mkdir config
touch config/database.yml
git add config/database.yml
cat config/database.yml |git hash-object --stdin

在这里插入图片描述
.git/objects又多了一个目录和文件
接下来进行commit,查看.git/objects目录

 git commit -m "init commit"

在这里插入图片描述
一下子多了这么多目录,我们一个一个查看

git cat-file -t 48034bd800e6cc760d76f236344c98db0f09ec30

我们可以发现这是一个tree对象的目录
在这里插入图片描述
这是一个根目录包含config目录和index.html文件。
继续查看

可以看到在这个tree对象中看到了一个Blod对象,正是放在config目录中的database.yml文件。
这时我们可以知道
1、Git中文件以Blod对象的形式存在,目录及文件的名称以Tree对象的形式存放。
2、Tree对象的内容会指向某个或某些Blob对象,或者其他的Tree对象。
接下来还有一个没有查看
在这里插入图片描述
这是一个commit对象
在这里插入图片描述
这个commit对象包含以下信息
1、某个Tree对象
2、本次的Commit的时间
3、本次Commit的信息
接下来我们看看Head
Head是一个指标,指向某一个分支,通常把他看作“当前所在分支”来看待。在.git目录中有一个名为HEAD的文件,其中记录的就是HEAD的内容.
在这里插入图片描述
从中可以看出HEAD指向master分支。如果在深入了解一下
在这里插入图片描述
可以看到所谓的master分支也不过是一个40字节的文件。

  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值