git实战-3、git工作原理

git实战-3、git工作原理

前言

要想用好git,了解其工作原理是必不可少的,以下我们可以带着以下两个问题去理解git原理。搞清楚两个问题:

  1. git文件结构是怎么样?
  2. commit提交git发生了什么?

git 文件目录

•    COMMIT_EDITMSG

•    config 当前 git 的配置文件

•    description (仓库的描述信息文件)

•    HEAD (指向当前所在的分支),例如当前在 develop 分支,实际指向地址是 refs/heads/develop
•    hooks [文件夹]
•    index
•    info [文件夹]
•    logs [文件夹]
•    objects [文件夹] (存放所有的 git 对象,对象哈希值前 2 位作为文件夹名称,后 38 位作为对象文件名, 可通过 git cat-file -p 命令,拼接文件夹名称+文件名查看)
•    ORIG_HEAD
•    refs [文件夹] 
      •    heads (存放当前项目的所有分支)
      •    tags (存放的当前项目的所有标签,又叫做里程碑)



cat 命令, 功能:用来显示文件。 例如 cat text.md 显示 text.md 文件的内容

ls -al 命令, 表示列出当前目录下的所有文件(包括隐藏文件)

git cat-file -t 命令 , 查看 git 对象的类型

git cat-file -p 命令, 查看 git 对象的内容

git cat-file -s 命令, 查看 git 对象的大小

commit过程详解

在这里插入图片描述

Git对于内容相同的文件只会存一个blob,不同的commit的区别是commit、tree和有差异的blob,多数未变更的文件对应的blob都是相同的,这么设计对于版本管理系统来说可以省很多存储空间。其次,Git还有增量存储的机制,我估计是对于差异很小的blob设计的吧。

git中的文件夹确实就是用tree组织的。从现有知识来看,可以把tree对应于文件夹对象

实践过程

1、以下命令是初始化一个库,然后新增一个文件之后进行commit。

git init watch_git_object

mkdir doc
cd doc
echo “hello” > readme
git status
cd …
git add doc
git status

find .git/objects/ -type f

app@iz8vb2knpxzlk1syb8dy3cz watch_git_object]$ find .git/objects/ -type f
.git/objects/ce/013625030ba8dba906f756967f9e9ca394464a

git commit -m"test"

[app@iz8vb2knpxzlk1syb8dy3cz watch_git_object]$ find .git/objects/ -type f
.git/objects/31/5f8050b11704358140f3f25f4ae682d631f7df
.git/objects/ce/013625030ba8dba906f756967f9e9ca394464a
.git/objects/6e/17e26237e12bc64cad4af1d9ddd8e8969d8111
.git/objects/76/982b78fe11a72b79c0f4c02cbf0474248f2077

如何计算一次提交产生多少tree和Blog?

在这里插入图片描述

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值