git:理解工作区,暂存区和本地仓库

引言

为了理解指令 git ls-files ,学习了 git 的三大概念:工作区,暂存区 和本地仓库。当理解这三个概念以后,建议去学习一下git:文件存储方式,它告诉了我们在上述三个阶段中,项目文件是以什么格式被存储,文件格式之间的关联,以及版本切换和分支切换的底层原理。


工作区:work-tree

就是你本地的工作目录,git 相关的文件全部保存在 .git 目录下。

暂存区:index / staging area / cache

当运行指令 git add 时,git 将需要跟踪的文件(不包括目录信息)复制并压缩成 blob 对象进行保存。当对同一个文件进行修改后,执行 add 指令会生成一个新的 blob。只有工作区和本地仓库也能进行版本管理(例如 Mercurial),git 引入 index 的目的是为了缓解 merge 冲突,这里暂不讨论。

本地仓库:repository

repository(repo)由 commits ,tree 和 blob 组成。当 commit 用作名词时,指 git 版本历史中的某一个版本;用作指令时,指生成当前版本的 commit,tree,并联合 index 中的 blob 一起保存到 repo 中,同时将 branch 指向最新的 commit(HEAD 指向当前的 branch,branch 指向 commit)。tree 保存的是其下 blob 和 tree 的地址,多个 tree 一起保存了整个版本的目录结构;commit 保存了一个 tree 和描述该版本的信息,该 tree 指向整个版本目录。
执行 commit 指令以后,index 会被清空。可以简单认为每一个 commit 都是独立永恒的。


其他

commit,tree,blob 是 git 下的格式,只能读取不能修改,当通过 commit 查找恢复历史版本时,这些对象才会被转化成可以使用的格式。

参考

What does “git ls-files” do exactly and how do we remove a file from it?

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值