我的Git笔记开篇—基本概念

趁着过年,我把之前学习过的Git内容好好整理了一下,准备写几篇关于Git的博客,一方面可以加深我对Git的认识,另一方面也希望可以帮助到有需要的小伙伴。我在使用Git工具的时候,经常会碰到这样几个概念:仓库、引用、工作区、对象。这几个概念可以说是Git学习的核心点了,只要把这几个概念弄清楚,后面使用Git操作的每一步都会变得十分清楚。下面我就从这几个基本概念讲起,简单来说可以概括为一句话:一个仓库、两个引用、三大工作区、四种对象。

仓库(repository),又称版本库,是我们文件最终存放的地方,分为本地仓库和远程仓库。

 

1.1  三大工作区

Git的本质是一套内容寻址的文件系统。Git分为工作目录、暂存区和版本库三大工作区。

工作目录,又称工作区,是用户实际操作文件的区域,在工作区的文件状态有两种:未被追踪(untracked)和已经被追踪(tracked)。在工作区中如果对文件进行修改,但是没有添加到暂存区,是不会被提交到版本库的。

暂存区,位于版本库内,实际上是一个包含文件索引(建立了文件和对象库中对象之间的关联 )的目录树,我们文件修改的内容并没有保存到该区域,它记录了文件名和文件状态信息(时间戳、文件长度等) 。

版本库,该区域中文件有三种状态:已修改(modified)、已暂存(staged)、已提交(committed)。

 

1.2  Git对象模型

git有四种对象模型,分别是blob、tree、commit、tag。git使用SHA-1算法,以数据对象的内容作为输入,生成40个字符组成的字符串来作为对象的标识符。例如同一个文件做了修改重新提交,git就是通过比较SHA-1值来比较两次提交的内容。

git cat-file [-tp] SHA-1  #查看git对象使用命令,参数t表示查看对象类型,p表示查看对象内容

blob对象,用来存储文件数据,通常是一个文件。查看blob对象内容也可以使用命令

git show SHA-1

tree对象,是一串指向blob或其它tree对象的指针。它的作用和目录类似,主要用来管理blob和tree对象,表示目录树的内容、内容之间的层次目录关系。查看tree对象内容还可以使用如下命令

git ls-tree SHA-1
git cat-file -p master^{tree}
git show SHA-1

commit对象,用来指向一个tree对象,由一个tree对象、父对象、作者、提交者组成。 标记项目某个特定时间点的状态 。注意:一个提交本身并没有包含任何信息说明其做了哪些修改,所有的修改都是通过与父提交比较得来的。提交commit对象使用git commit命令提交,将暂存在暂存区域的index全部提交,提交的父对象为当前分支HEAD。

查看每次提交修改的具体内容命令:

git log -p  #通过上下键来查看所有提交修改的内容

tag对象,在git里tag既是一种对象类型,也是一个引用,这部分内容放在引用里介绍。

 

1.3  Git引用

引用的本质即指针,git中分支和标签都是对提交的引用(指向commit对象的指针) ,存放路径位于:.git/refs。

标签(tag)对象,由对象名、对象类型、标签名、标签创建者名字组成。

在git中,标签有两类,轻量级tag和重量级tag。轻量级tag的类型为commit对象。重量级tag的类型为tag对象,在创建重量级tag的时候会在对象库中生成一个tag对象,轻量级tag只是commit的引用。

标签与分支(branch)相比,都是指向一个commit对象,标签可以看做是一个常量指针,不能改变;而分支是一个变量指针。关于分支和标签的使用,我在后面会单独再讲。

  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值