Git详解(带图) --- 本地电脑的工作区、暂存区、本地仓与远程仓_git 工作区域

本文详细介绍了Git文件夹结构,包括工作区、本地版本库(.git)、index暂存区、HEAD指向的最新提交、logs日志文件夹、objects对象库等关键组件。通过这些内容,读者能理解Git如何跟踪文件更改、管理分支和记录提交历史。
摘要由CSDN通过智能技术生成

首先我们从 git 文件夹结构入手,比如我们创建了一个文件夹 learnGit 并且使用 git init 命令初始化成一个 git 文件夹,里面有一个 readme.txt 文件,那么 readme.txt 其实就处在该 git 文件夹的工作区,这点很好理解对吧。

此时如果我们在 learnGit 目录中使用 command + shift + . 快捷键 (显示隐藏文件),会出现一个 .git 文件夹,这就是我们所谓的本地版本库,它是 git 版本控制系统用于存储仓库元数据和对象的目录,更是 git 的核心。它包含了 git 仓库的全部信息,包括版本历史、分支、标签、配置等。

3.2 Key folder 隐藏文件 .git

.git 文件夹是Git版本库的核心,它使得Git能够追踪文件的更改、管理分支、记录提交历史等。这个文件夹通常位于项目的根目录下。在通常情况下,用户不太需要直接操作这个文件夹,而是通过Git命令来与版本库进行交互。为了更好地了解 git,一起来看看以下几个重要的文件及文件夹。

3.2.1 index 文件

没错,通过名字不难看出 index 文件实际上就存储了将被包含在下一次提交中的文件信息,我们可以理解为这就是 Staging Area 即暂存区的内容。这就是为什么说暂存区的内容其实也被包括在工作区。

3.2.2 HEAD 文件 (*)

指向当前所在分支的最新提交,当前表明我们在本地的 main 分支,如果我们切换到另一本地分支,比如 temp,那么这个 HEAD 文件就会显示 ref: refs/heads/temp (之后演示的内容原理都和 main 分支一样)。HEAD 文件的内容是一个路径文件,我们打开这个路径下的main文件 .git/refs/heads/main

显示为一段 hash 码,我们先不要关掉这个文件,等下看这个 hash 码和谁能对应上

3.2.3 logs 文件夹 (*)

由文件夹名字不难看出这是一个用于存放记录日志的目录,logs 文件夹下又包括一个 HEAD 以及 refs 文件夹,如下图所示

与上一个 HEAD 文件不同,这个 HEAD 文件在 logs 文件夹下,它主要记录的是 ‘HEAD’ 引用的变化,即当前所在的分支或提交的变化。可用于记录分支切换,版本回退,提交等日志。比如每次切换分支或提交时,都会在这个文件中生成一条记录,包括变化的时间、旧的 HEAD 引用的位置、新的 HEAD 引用的位置等信息。

refs 文件夹中包含 heads 和 remotes 两个文件夹,remotes 很明显是关于远程仓的,我们主要来看看 heads。heads 文件夹中包含一个 main 文件。这个文件是用于记录本地特定分支的引用变化,每次该分支发生变化时,都会在这个文件中生成一条记录,包括变化的时间、旧的分支位置、新的分支位置等信息。

我们用文本编辑器打开这个 .git/logs/refs/heads/main 文件

我们发现最后的 hash 码和之前那个对应上了!

.git/HEAD 指向的 .git/refs/heads/main 哈希码 == .git/logs/refs/heads/main 最后的哈希码

我们知道 HEAD 表示当前分支提交的最新版本,上面这个例子表示,我们目前所在的本地 main 分支上最新提交版本对应的 reference (快照) 是 ece57b94dd97a…5896 这个 Hash 码,由此我们得出结论,在获取历史提交版本时是以 commit 对应的 Hash 码作为依据找到对应的提交版本,这个 Hash 码在 .git/logs 日志中可以找到。

可是,有了 Hash 码还不够,我们还要根据这个 Hash 码找到具体的提交内容,那么具体的提交内容存放在哪呢?

3.2.4 objects 文件夹 (*)

objects 就是我们的本地对象库,它的作用是存储所有的 git 对象,如提交内容、树(目录)、Blob(文件)等。所以如果我们要依据 Hash 码找到实际的提交内容,就要拿着 logs 文件夹中存储的 Hash 码来 objects 文件夹取。在这个目录中,git 会根据哈希值的前两个字符将对象分组存储。每个提交对象的内容会被压缩、存储在一个以哈希值命名的文件中。如果对象内容有变化,git 会生成新的哈希值。

打开这个 ec 文件夹就能看到,我们最后一次提交的具体内容了,这个内容是以之前那个 Hash 码命名的。很巧的是,我们上一次的提交和最新的提交 Hash 码开头差不多,所以 git 通过计算前两位 hash 码将两者都放在了这个文件夹中。


4. Conclusion 总结

img
img
img

既有适合小白学习的零基础资料,也有适合3年以上经验的小伙伴深入学习提升的进阶课程,涵盖了95%以上大数据知识点,真正体系化!

由于文件比较多,这里只是将部分目录截图出来,全套包含大厂面经、学习笔记、源码讲义、实战项目、大纲路线、讲解视频,并且后续会持续更新

需要这份系统化资料的朋友,可以戳这里获取

大厂面经、学习笔记、源码讲义、实战项目、大纲路线、讲解视频,并且后续会持续更新**

需要这份系统化资料的朋友,可以戳这里获取

  • 4
    点赞
  • 10
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值