Git基本原理介绍(二)--git add的背后

使用git init初始化之后

先来看看.git目录下所有的文件 ls -R .git,通过这个命令可以看到递归显示.git目录下的所有文件
在这里插入图片描述

在对文件进行修改之后,我们可以通过git status命令查看文件的变化情况,这里简单地以新建一个new.txt为例,内容为hello world

在这里插入图片描述
在这里插入图片描述

观察到有一个未跟踪的文件new.txt,此时我们.git目录下的文件不会有任何变化

但是当我们使用git add命令之后
在这里插入图片描述
再次使用 ls -R .git查看,发现.git目录下较之前多了两个文件夹

  1. 一个是.git下的index文件

  2. 另一个是.git/object下3b文件夹,其中3b文件夹下还有以一串哈希值为名的文件(文件名是通过SHA1算法得出的)

在这里插入图片描述

先来看看e6文件夹下的那个文件,这里先来学习两个命令

git cat-file -t  <foldername+filename>	#查看文件类型
git cat-file -p  <foldername+filename>  #查看文件内容

对应如下命令:

git cat-file -t 3b18e5 ##3b是我产生的文件夹的名字,后面直接跟上子文件名字的前六位即可
git cat-file -p 3b18e5

在这里插入图片描述
观察到该文件的类型是bolb,而bolb代表该文件是用来存储内容的

可以看到该文件里存储的内容正好是new.txt里的内容hello world

也就是说它存取了new.txt文件的内容,那有没有存取new.txt这个名字呢?

实际上是没有的,我们不妨来做如下实验

  • 新建一个file.txt文件
  • 同样像其中输入hello world
  • git add file.txt
  • ls -R .git

在这里插入图片描述
但是既然git status可以查看文件的状态,说明git本地肯定还是存储了关于文件名的信息
在这里插入图片描述
另外,说到这个以一串160bit的哈希值为名的文件,如果我们直接用cat命令查看,得到的看似是一串乱码的东西,实际上它是把hello world压缩过后的内容
在这里插入图片描述
所以才要使用使用git cat-file -p ~才能查看解压之后的内容

我们不妨来看看new.txt原本的大小和压缩后的大小,使用ls -lh ~

在这里插入图片描述


再来说说SHA1算法加密的字符串

我们得到的18e512dba79e4c8300dd08aeb37f8e728b8dad这一串数字并非直接是由"hello world"经过SHA1算法加密而来

而是由字符串"bolb 12\0 hello world"加密而来,含义分别是[文件类型 + 文件大小+ \0 +文件内容]

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

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值