这是我参与2022首次更文挑战的第14天,活动详情查看:2022首次更文挑战
前言
今天我们来复习回顾一下Git操作,git在我们工作日常中是常用的,这一章大家跟着我一起来看一看吧!
一、初始化
该处是用来提交时当作签名使用的
git config --global user.name "我的用户名"
git config --global user.email "我的邮箱"
#删除配置信息
git config --global --unset user.name
git config --global --unset user.email
二、Git工作流程与区域
1、区域
-
工作区
平时写代码的文件目录
-
暂存区
git add 后提交暂存的地方
-
版本库
git commit 后给你生成版本的地方,注意push是提交到远程仓库而不是版本库,请勿混淆
2、工作流程
每个项目都有一个Git目录(.git)他是Git用来保存元数据和对象数据库的地方.该目录非常重要,每次克隆镜像仓库的时候,实际拷贝的就是这个目录里的数据
①、在工作目录中修改某些文件
从项目中取出某个版本的所有文件和目录,用以开始后续工作的叫做工作目录,这些文件实际上都是从Git目录中的压缩对象数据库中提取出来的,接下去就可以在工作目录中对这些文件进行编辑
②、保存到暂存区域,对暂存区做快照
暂存区域只不过是个简单的文件,一般都放在Git目录中,有时候人们会把这个区域的文件叫做索引文件,不过标准说法还是叫暂存区域
③、提交更新
将保存区在暂存区域的文件快照永久转储到本地数据库(Git目录)中
我们可以从文件所处位置来判断状态:如果是Git目录中保存着的特定版本文件,就属于提交版本;如果做了修改并已放入暂存区域,就属于已暂存状态;如果自上次去除后,做了修改但还没有放到暂存区域,就是已修改状态
三、对象详解(底层命令)
1、git对象
- key:val 组成的键值对(key是val相应的hash)
键值对在git内部是blob类型(git特有)
- 存储数据文件内容,也称为数据对象
① 直接写入git对象方法与读取(存入".git/objects")
#将打印内容写入对象(git数据库)并且返回其相应哈希值
echo "写入的对象内容" | git hash-object -w --stdin
#读取内容并不能直接cat读取,因为git存入时已经加密,需要如下代码 -p:内容 -t:类型
git cat-file -p 存入对象的哈希值(此值可以由上一步得到)
#将文件写入git对象,即我们常见的版本控制中出现的
git hash-object -w ./test.txt
#查看Git存储的数据 返回其文件夹内的所有哈希文件
find .git/objects -type f
2、树对象
树对象是存储键值 作用为控制版本,如我们的版本前回退 就是在操作这个对象的(指向改变)
作用就是生成快照
这个也是git的必杀特性,因为他的切换分支与版本都很快 只是指针切换
构建树对象
我们可以通过 update-index , write-tree , read-tree 等命令来构建树对象并且塞到暂存区
① 利用 update-index 命令 创建暂存区
利用
update-index命令 为test.txt文件的首个版本创建一个暂存区,并通过write-tree命令生成树对象
#1生成一个树对象
git update-index --add --cacheinfo 100664(文件状态码:普通文件) 哈希值 对应文件名
#生成快照(树对象)
git write-tree
#2 将第一个树对象加入第二个树对象,使其成为新的树对象
git read-tree -prefix=bak 哈希值(树对象的)
git write-tree
② 查看暂存区当前样子
git ls-files -s
3、提交对象
- 通过上述两个对象操作后,你会发现你已经生成了不同项目的快照,但是问题是:如果想重用这些快照,你必须记住所有三个 SHA-1(快照)哈希值 .但是,你也完全不知道是谁保存了这些快照,在什么时刻保存的,以及为什么保存这些快照.而以上这些,正是提交对象(commit object)能为你保存的基本信息
- 我们可以通过调用commit-tree命令创建一个提交对象,为此需要指定一个树对象的SHA-1值,为此需要指定一个树对象的SHA-1值 , 以及该提交的父提交对象(如果有的话,第一次将暂存区做快照就没有父对象)
- 真正的一个版本其实就是提交对象
① 创建提交对象
echo "first commit" |git commit-tree 树对象的哈希值
②指定一个树对象的SHA-1值 , 以及该提交的父提交对象
echo "second commit" | git commit-tree 提交的树对象哈希值 -p 父亲树对象哈希值
总结:Git的工作流程大致如此,大家多多理解,还是那句话,一步步来,加油!