Git底层数据结构和原理之一:状态模型
2020-05-22 本文已影响0人
longLiveData
本文仅供笔者学习记录之用,侵删
来源:阿里技术 公众号,作者 与水
原文:https://mp.weixin.qq.com/s/l5JU9e6_HrS_-ixiBIrqsA
状态模型:工作区,暂存区,本地仓库,远程仓库
上图描述了 git 对象的在不同的生命周期中不同的存储位置,通过不同的 git 命令改变 git 对象的存储生命周期。
工作区 (workspace)
当前工作空间,也就是我们当前能在本地文件夹下面看到的文件结构。初始化工作空间或者工作空间 clean 的时候,文件内容和 index 暂存区是一致的,随着修改,工作区文件在没有 add 到暂存区时候,工作区将和暂存区是不一致的。
暂存区 (index)
老版本概念也叫 Cache 区,就是文件暂时存放的地方,所有暂时存放在暂存区中的文件将随着一个 commit 一起提交到 local repository 此时 local repository 里面文件将完全被暂存区所取代。暂存区是 git 架构设计中非常重要和难理解的一部分。
本地仓库 (local repository)
git 是分布式版本控制系统,和其他版本控制系统不同的是他可以完全去中心化工作,你可以不用和中央服务器 (remote server) 进行通信,在本地即可进行全部离线操作,包括 log,history,commit,diff 等等。完成离线操作最核心是因为 git 有一个几乎和远程一样的本地仓库,所有本地离线操作都可以在本地完成,等需要的时候再和远程服务进行交互。
远程仓库 (remote repository)
中心化仓库,所有人共享,本地仓库会需要和远程仓库进行交互,也就能将其他所有人内容更新到本地仓库把自己内容上传分享给其他人。结构大体和本地仓库一样。文件在不同的操作下可能处于不同的 git 生命周期,下面看看一个文件变化的例子。
文件变化
- 把工程从远程仓库clone到本地
- 在工作区修改了a.java
- 将修改的内容add到暂存区,也可以直接commit -a到本地仓库
- 把暂存区的内容commit到本地仓库
- 把本地仓库push到远程仓库