GIT的组成

GIT由三个部分组成

  • 工作区
存放当前操作文件的本地文件系统目录
a、在工作区可随意添加或编辑文件
复制代码
  • 暂存区
b、将修改后的文件添加到暂存区
复制代码
  • 提交历史
c、并记录到提交历史
复制代码

工作区

Git 可以把工作区中的文件处理压缩成一个提交对象
也能将取得的提交对象解包成文件同步到工作区中
复制代码

暂存区

a、在工作区可能会同时更改多个完全不相干的文件
b、将它们分别放入暂存区
c、在不同的提交中加入提交历史
d、暂存区还用于合并冲突时存放文件的不同版本
复制代码

a、刚初始化的Git仓库 暂存区是空的
b、然后会填充最近一次提交所对应的文件快照
复制代码

git status

将工作区的文件与暂存区的文件快照进行对比
并提示我们有哪些做了修改的文件尚未加入暂存区
复制代码

不同的区对应不同的实体

a、工作区有可见的文件系统目录
b、暂存区的实体是位于 .git 目录的 index 文件
c、提交历史通过 .git/objects 目录保存着所有提交对象
复制代码

Index 文件

index 是一个二进制文件
包含着一个由路径名称、权限和 
blob 对象的 SHA-1 值组成的有序列表
复制代码

元数据

包含
a、每个文件的创建时间
b、最后修改时间等元数据
c、指向实际的数据对象的引用
d、保存了一份完整的文件快照
因此可以通过对比SHA-1校验和
实现与工作区文件之间的快速比较
复制代码

查看index中的内容

git ls-files --stage
复制代码

包含
a、暂存区文件的路径名称
b、SHA-1 ID
复制代码

文件内容已经作为 blob 对象保存到了 .git/objects 目录中
复制代码

查看.git/objects目录

tree .git/objects -L 2
复制代码

blob 对象

blob 对象是 Git 用来保存文件数据的二进制对象
可以通过 ID 取得对应的 blob 对象
复制代码

通过ID查看对象内容

 git cat-file -p adc335f5acd0ef124dbdccef5060f5f01113a5dc
复制代码

将一个修改过的文件加入暂存区后
如果又在工作区对文件进行了新的修改
需要重新将其加入暂存区
复制代码

提交历史

提交历史是工作区文件在不同时间的文件快照

快照即文件或文件夹在特定时间点的状态
包括内容和元信息
复制代码

查看当前分支的提交历史

git log
复制代码

a、Git 通过「提交对象」来储存每一次提交
b、对对象内容进行 SHA-1 计算得到的哈希值即ID
不同的内容一定会得到不同的结果
c、Git 既把ID作为每一个对象(不仅仅是提交对象)的唯一标识符
d、也用作 .git/objects 目录中的地址(其中存储着实际的二进制文件)
复制代码

通过id找对象并打印内容

git cat-file -p f6ff29325167718c5eafb6fb1c10aea721b2fd12
复制代码

提交对象的内容包含

  • 对应的 tree 对象的 ID
  • 父提交对象的 ID
  • 作者、提交者及提交信息等元信息

tree 对象

git ls-tree  f6ff29325167718c5eafb6fb1c10aea721b2fd12
复制代码

主要由其他tree对象和blob对象的ID、路径名称组成
复制代码

一个 tree 对象即可表示整个工作区中所有已提交目录及文件的内容
复制代码

提交历史中的每一个提交都包含着一份完整的某一时刻的文件快照
并通过保存上一次提交的引用形成连续的文件快照历史
复制代码

猜你喜欢

转载自juejin.im/post/7036774456110350344