工作目录、暂存区和版本库
版本库中文件三种状态
-已修改:modified
-已暂存: stagged
-已提交: committed
三大工作区:
工作目录、暂存区和版本库(仓库)
工作区下的文件状态:
-未被追踪:untracked
-被追踪:tracked
.git存放的是版本信息
.git目录 说明
仓库子目录 | 功能描述 |
---|---|
branches | 项目分支信息 |
hooks | 默认的hook脚本,由特定时间触发 |
info | 内有exclude文件,指定git要忽略的文件 |
.logs | 历史记录,删除的commit 对象等 |
objects | git数据对象,commit ,tree, blod ,tag |
refs | git 引用,指向(远程分支、标签的指针) |
config | git项目配置信息 |
HEAD | 指向当前的分支的末端 |
index | stagint area 暂存区 |
commit_edit | 最后一次提交的注释 |
description | git项目信息描述 |
Git对象模型
对象(object s)
–类型:4种数据对象:blod tree commit tag
–大小: 对象数据内容的大小
–文件名:如果使用SHA1算法生成
SHA1对象数据
– 用40个字符的字符串用来表示对象名: 目录 + 名
– 字符串由对象内容做SHA-1计算得来
– 通过比较SHA-1 值来比较两个文件内容:快
不同类型的对象用途
- blob :存储文件数据,通常是一个文件
- tree : 类似一个目录, 用来管理tree和blob
- commit:指向一个tree,标记项目某个特定时间点状态
- tag : 用来标记某一个提交
blod对象
–对象全部是二进制格式数据
查看blob文件内容
git show SHA1
git cat-file -p SHA1
git cat-file -t SHA1
tree 对象
- 包括: mode 、对象类型、SHA1值、名字
- 一串指向blob或者其他tree对象的指针
- 表示目录树的内容、内容之前的层次目录关系
查看tree对象内容
git ls-tree SHA1
git cat-file -p master^{tree}
git cat-file -p SHA1
commit 对象
-
用来指向一个tree对象
-
组成
- 一个tree对象
- 父对象:一个目录必须有根提交
- 作者:修改人名字、日期
- 提交者:实际创建提交的名字、日期
-
一个提交本身并没有包含任何信息说明其做了任何修改,所以修改都是通过与父提交比较的来
提交commit对象
- 使用git commit命令提交
- 将存储在暂存区的index全部提交
- 提交的父对象为当前分支HEAD
tag对象
标签对象
-
组成
对象名、对象类型、标签名、标签创建者名字
-
指向一个commit的SHA1
-
与分支比较
都是指向一个commit
标签可以看作是一个常量指针,不能修改
分支是一个变量指针
查看标签信息
git cat-file -p v1.0
git tag -a -m "add v1.2" v1.2 //生成tag信息
git 引用
引用的本质:指针
分支、标签都是对提交的引用(指向commit 的指针)
引用存放的路径:.git/refs