Git学习(三)——staging area 工作原理

本文深入探讨Git的工作原理,包括working directory、staging area和history repository的构成。阐述了从第一次commit到后续commit的过程中,git add和git commit如何交互更新对象库和索引,以及如何处理文件内容的修改。文章最后提出了history repository的定义和理解难点。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

这一次的内容整理自极客学院

相关概念解释:

  • git中包含的对象有四种:tag、commit、tree和blob对象,四者之间的关系如下图所示:
    git object
  • git由三个部分组成:分别是working directorystaging areahistory repository
  • working directory是文件增删修改的地方,即实际操作的目录
  • git工作区是git项目下的.git文件夹,其中,/.git/objects目录下包含了git项目开发过程当中的所有对象,是一个对象库
  • staging area/.git/index文件,index文件是一个索引的集合,索引指向了对象库当中由working directory文件(注意 git在意的是文件的内容)生成的blob对象,其中每个索引还保存了tree对象的相关信息,所谓的tree对象的即每个文件的目录结构
  • history repository,git commit之后记录的归档

工作原理

第一次commit

原理图
- 涉及的命令:

mkdir gitTest
cd gitTest
mkdir folder1 
touch ./folder1/file1.txt file2.txt
#向文本文件中写入内容
git add file1.txt file2.txt
git commit -m 'first commit in master branch'
  • 过程:
    1. 通过git init创建一个master分支,并在working directory中创建相关文件和目录结构
    2. git add指令第一次提交的时候生成了index文件,同时对象库中生成了两个blob对象,index中包含了指向两个对象的索引以及之后要生成的tree对象的相关信息
    3. git commit指令执行过后,根据staging area中的tree对象信息会在对象库中生成两个tree对象和一个commit对象,tree对象指向blob对象,commit对象执行顶层的tree对象,并且HEAD指针指向commit对象
第x次commit
  • 如果之后的提交没有修改之前的文件内容,其过程和第一次提交的原理是一样的
  • 如果修改了之前的文件内容,其过程如下:
    第2次提交
    -过程:
    1. git对象是根据文件内容生成的,因此,当修改了file2.txt的时候,并且add之后,git对象库生成新的对象,index文件中也生成新的索引,并且重新计算tree对象的相关信息
    2. commit执行后,生成新的tree对象,tree对象指向新的blob对象以及以前部分未改变内容的blob对象或是tree对象,同时commit对象指向新的tree对象,HEAD指针也发生移动,指向新的commit对象。

仍然存在的问题

  1. history repository的准确描述
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值