git 的组件

GIT 的组件

git有几个重要的组件.

  • tag
  • blob
  • commit
  • tree

blob组件

1.1 当我们执行git init时会出现一个.git的隐藏文件夹

git 的组件_第1张图片
1.png

打开.git的隐藏文件夹会看到一个objects的文件夹,是用来存放git的所有组件的.
初始化之后objects中会有info和pack两个文件夹.

git 的组件_第2张图片
2.png

创建一个文件(echo a>a.txt),使用git add. 提交到git的Stage(暂存区),此时在查看objects文件夹中

git 的组件_第3张图片
4.png

多了一个e6的文件夹,里面有一个名字很长的文件,这个文件夹就是blob 组件。每次把文件提交到Stage中,就会在objects文件中创建一个blob组件,GIT中每个组件都是以hash的二进制方式来存储,这个组件的名称就是文件夹名称+文件夹中的文件的名称,这个hash码是唯一的,也是组件的唯一标识.

1.2 blob组件并不会对文件信息进行存储,而是对文件的内容进行记录的.

添加一个文件,我们把a.txt中的内容替换成bb(原来是a),此时文件的状态变成Modified状态,再次通过git add . 提交文件到Stage。

再观察objects目录

git 的组件_第4张图片
6.png

多了一个e0的目录,虽然我们的文件没有发生变化,但是内容发生了变化,此时git会再次创建一个blob 组件存储到objects文件夹中.

1.3 我们再次创建一个和a.txt的文件内容一模一样的b.txt

git 的组件_第5张图片
7.png

执行git add . 再次观察objects目录的变化.

git 的组件_第6张图片
8.png

并没有增加任何blob组件,因为b.txt的内容和a.txt一样,所以git发现这个blob已经存在了,就不会再增加新的组件.


commit组件和tree组件

1.1 之前已经将a.txt和b.txt.提交到了暂存区中,现在执行git commit -m "xxxx" 命令,我们会发现多了两个文件夹

git 的组件_第7张图片
9.png

我们可以用git log来查看一下

git 的组件_第8张图片
10.png

我们看到了commit 6660d9293361c01277891b0db0d581f0e8622711
这就是commit组件.

1.2 commit组件在每次提交之后都会生成,当我们进行commit之后,首先会创建一个commit组件,之后把所有的文件信息创建一个tree组件,然后把Stage Area中的blob组件封装在tree中完成一次提交.
使用 git cat-file -p 6660d 查询

git 的组件_第9张图片
12.png

我们会发现commit组件下有一个tree组件,是之后cat-file一下这个tree组件,我们发现了最开始提交的两个blob组件,而在tree组件中记录了文件的基本信息。

git 的组件_第10张图片
13.png

blob commit tree 这三个组件管理着GIT的所有版本文件。

你可能感兴趣的:(git 的组件)