【Git】第三部分 git底层概念
3. git底层概念
3.1 基本的linux命令
clear :清除屏幕
echo 'xxx'
:往控制台输出信息
echo 'xxx' > test.txt
:可以创建文件
ll :将当前目录下的 子文件&子目录平铺在控制台
find 目录名: 将对应目录下的子孙文件&子孙目录平铺在控制台
find 目录名 -type f :将对应目录下的文件平铺在控制台
rm 文件名 : 删除文件
mv 源文件 重命名文件: 重命名
cat 文件😗* 查看对应文件的内容
vim 文件:
按 i 进插入模式
进行文件的编辑按 ESC键
按:
键 进行命令的执行
q! : 强制退出(不保存)
wq :保存退出
set nu: 设置行号
3.2 .git目录
命令:在此项目所在的目录执行:git init
作用:初始化后,在当前目录下会出现一个名为 .git
的目录(下图所示),所有 Git
需要的数据和资源都存放在这个目录中。不过目前,仅仅是按照既有的结构框架初始化好了里边所有的文件和目录,但我们还没有开始跟踪管理项目中的任何一个文件。
hook
–> 包含客户端和服务端的钩子脚本
info
–> 包含一个全局性的排除文件
logs
–> 保存日志信息
objects
–> 目录存储所有的数据内容
refs
–> 目录存储指向数据的提交对象的指针(分支)
config
–> 文件包含项特有的配置选项
description
–> 用来显示对仓库的描述信息
HEAD
–> 文件指示目前被检出的分支
index
–> 文件保存的暂存信息
3.3 git对象
Git 的核心部分是一个简单的键值对数据库。你可以向该数据库插入任意类型的内容,它会返回一个键值,通过该键值可以在任意时刻再次检索该内容。
-
向数据库中写入内容,并且返回对应的键值
echo 'test1' | git hash-object -w --stdin
-w
:命令存储数据对象,如果不指定该命令只会返回对应的键值,并不会将数据存入到数据库(objects)中--stdin
:表示该命令从标准输入读取内容,如果不指定该命令,需要在命令的末尾给出待存储的文件的路径 向数据库中存文件
git hash-object -w 文件路径
-
读取对应文件的键值
git hash-object 文件路径
返回的是一个长度为40个字符的hash值
-
查看 Git 是如何存储数据的
find .git/objects -type f
Git 存储内容的方式:一个文件对应一条内容,hash值的前2个字符用于目录的命名,后38个字符用于文件命名
-
查看键值的数据(内容)
git cat-file -p hash值
-p :选项可指示该命令自动判断内容的类型,并为我们显示格式友好的内容
返回:对应文件的内容
-
对文件进行简单的版本控制
创建一个新文件并将其内容存入数据库命令:
echo 'version 1' > test.txt
git hash-object -w test.txt
返回:
83baae61804e65cc73a7201a7252750c76066a30
向文件里写入新内容,并再次将其存入数据库命令:
echo 'version 2' > test.txt
git hash-object -w test.txt
查看数据库内容命令:
find .git/objects -type f
git cat-file -p 83baae61804e65cc73a7201a7252750c76066a30
git cat-file -p 1f7a7a472abf3dd9643fd615f6da379c4acb3e3a
利用
cat-file -t
命令,可以让 Git 告诉我们其内部存储的任何对象的类型git cat-file -t 1f7a7a472abf3dd9643fd615f6da379c4acb3e3a
返回的是
blob
类型问题:
1.记住文件的每一个版本所对应的 hash值并不现实
2.在 Git 中,文件名并没有被保存——我们仅保存了文件的内容
3.解决方案:树对象
4.当前的操作都是在对本地数据库进行操作不涉及暂存区
3.4 树对象
-
我们先创建一个文件
echo 'verson1' >version-first.txt
,此时还没交给git管理 -
把文件交给git去管理
git hash-object -w ./version-first.txt
,生成git对象,返回的hash值作为键,对应的文件内容作为值,git对象只能代表文件版本不能代表项目版本。 -
为首个版本创建一个暂存区
git update-index --add --cacheinfo 100644 04aa2ea7a69769f4357ee9908073d10cd5e29557 version-first.txt
说明:
- 100644:表示这是一个普通文件
- 100755:表示一个可执行文件
- 120000:表示一个符号链接
--add
:表示因为此前该文件并不在暂存区中 首次需要—add
--cacheinfo
:因为将要添加的文件位于 Git 数据库中,而不是位于当前目录下,所有需要cacheinfo
git ls-files -s
查看暂存区
-
生成树对象
git write-tree
,树对象就是暂存区的快照,代表一个项目的版本 -
查看树对象
git cat-file -p cb3b308810c51a0474ddb428d114bf20944b5334
3.5 提交对象
我们可以通过调用 git commit-tree hash值
命令创建一个提交对象,为此需要指定一个树对象的 hash值,以及该提交的父提交对象的hash值(如果第一次将暂存区做快照就没有父对象)
1.创建提交对象
echo 'first-commit' | git commit-tree xxx
返回:一个新的hash值
echo 'second-commit' | git commit-tree 要添加的tree的hash值 | 父对象tree的hash值
返回:一个新的hash值
2.查看提交对象
git cat-file -p xxx
3.注意
git commit-tree
不但生成提交对象,而且会将**对应的快照(树对象)**提交到本地库中
总结
以上就是今天要讲的内容,希望对大家有所帮助!!!
版权声明:本文内容由互联网用户自发贡献,该文观点仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 举报,一经查实,本站将立刻删除。
文章由极客之音整理,本文链接:https://www.bmabk.com/index.php/post/82916.html