git不得不学因为自己忘了杂么办啊哦这是个实战内容,原理都直接实战了比较底层001

安装

咳咳,自己安装去吧

git init

初始化 git仓库.并且 生成 .git 文件夹.

在这里插入图片描述

hooks: 包含客户端或服务端钩子脚本
info: 全局性排除文件
logs: 日志信息
objects: 存储所有数据内容
refs: 存储指向数据(分支)的提交对象指针
config: 项目特有配置选项
desc: 仓库描述信息
HEAD: 目前被检测出来的分支
index: 文件暂存区信息

git对象

git 核心是一个 kv 数据库. 可以插入任意数据. 会返回一个 kv.
我们将一个文件存入 git数据库.

在这里插入图片描述
会返回一个hash 值

在 objects 中可以看到该文件的压缩版本

在这里插入图片描述
查看文件
在这里插入图片描述
修改文件内容

我们修改文件,之后,在次存储到 git 数据库中
git  hash-object -w 001.txt

我们修改了文件内容之后,在重新使用 上面的命令 进行存储
git 原来的文件不动,会重新生成,存储一遍文件
在这里插入图片描述
git 数据对象 存储了文件的快照
git cat-file -p hashValue : 查看文件的内容 git cat-file -t hsahValue : 查看文件的类型 find .git/objects/ -type f : 查看目录内的所有文件

树对象

解决了 git 对象没有记录文件名的问题. 将文件名 HashValue 联系到一起

组织

树对象是目录, git对象是数据内容

查看树对象

git cat-file -p hashValue
git cat-file -p master^{tree}

在这里插入图片描述

构建树对象

构建树对象

1 创建文件

在这里插入图片描述

2 创建git对象

在这里插入图片描述

3 这时, test.txt 的第一个git对象,创建一个缓存区.并且构建树对象

git update-index --add --cacheinfo 100644 hashvalue..... test.txt
知识点
在这里插入图片描述
在这里插入图片描述
最后的 test.txt 就是 这个 hashValue 的名称.也是 git 对象的名称

4 查看暂存区的树对象

git ls-files -s

在这里插入图片描述
缓存区已经有了树对象
5 查看版本库内是否有该对象
在这里插入图片描述
这里还没有 树对象,只有一个 git对象
6 git write-tree 生成树对象

给暂存区 生成对象,放到版本库中

在这里插入图片描述
7 查看 树对象存储的内容
在这里插入图片描述
8 查看暂存区的内容
git ls-files -s
在这里插入图片描述

展示出来的是 git 对象 和 对其的命名
9. 查看版本库内的树对象

在这里插入图片描述
git对象代表文件的一次次版本. 树对象代表项目的一次次版本

新增对象

对已有的树对象	新增树对象. 多个树对象联系到一起. 多个文件联系到一起.
组成整个项目
1 创建新的文件

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

2 生成 git 对象
git hash-obejct -w new.txt

在这里插入图片描述

3. 修改之前的 text.txt 文件.
重新生成树对象 和 new.txt 文件

在这里插入图片描述

git hash-object -w text.txt
4. 现在 new.txt 有了 git对象. 而 test.txt 只有旧版本的对象. 这里需要生成 text.txt 的新的git对象

在这里插入图片描述
5. 现在git对象情况
在这里插入图片描述

6. 生成 test.txt 树对象

在这里插入图片描述
这次还是 text.txt 文件构建树对象 ,会覆盖第一个 test.txt 生成的树对象
在这里插入图片描述

7 为 new.txt 生成 git 对象

git hash-object -w new.txt

8 将 new.txt 和 text.txt 文件存入暂存区.生成树对象

git update-index --add --cacheinfo 100644 hashvalue new.txt

9 生成树对象

git write-tree
现在objects 中的存储情况

之前objects 中只有一个test.txt 树对象. 而暂存区中还要 test.txt树对象
第二次,将new.txt 生成树对象,test.txt 修改,重新生成git对象,生成树对象
现在暂存区中有俩个树对象

暂存区树对象
在这里插入图片描述
版本库对象
在这里插入图片描述

树对象合并

现在 树对象的情况

在这里插入图片描述

现在 objects 中一共有 1个new.txt的git对象
2个 t1.txt的git对象
2个树对象
一共是 5个对象

在这里插入图片描述

将第一个树对象 加入 第二个树对象

git read-tree --prefix=bak hashvalue git write-tree
在这里插入图片描述

git read-tree : 可以将 树对象读入 暂存区
现在暂存区存储的是 new.txt 和 t1.txt 第二个版本的树对象. 

在这里插入图片描述

我们在将 第一个树对象读入暂存区. 之后再合并,写出到版本库

具体命令
在这里插入图片描述

git read-tree --prefix=bak 91fe0ec70f5e964a71d54364701ebd34cca24ee8

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

分支分析

我们一番操作之后,可以尝试着分析一下 树对象模型. 树对象之间是怎么依赖的
我们有三棵树:
	一颗 t1.txt (version == 1) 的树对象
	一颗 t1.txt(version == 2) + new.txt 的树对象
	以及: 
		包含了t1.txt(v=1) and t1.txt(v=2) and new.txt 树对象的项目版本

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

总结

这篇文章比较乱,但是讲解了底层原理,并带着实际的操作
当然实际的操作也比较乱.建议看视频
网址
以后可能会整理一下. 但是主要理解 git 对象. 树对象即可
树对象将 git对象和文件名联系了起来. 也就是将git对象的hash 和文件名联系了起来. 但是我们修改了文件之后,需要再重新生成一个git对象. 这时将new.txt 和 修改后的text001.txt 生成git对象. 并生成树对象.联系起来. 这样的话就作为 项目的另一个版本了

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值