美文网首页
git 原理初探

git 原理初探

作者: 1璐有你 | 来源:发表于2019-12-16 18:58 被阅读0次

前言

最近一直在研究 git 命令的操作效果,但总是感觉一知半解。自从看了知某平台文章这才是真正的Git——Git内部原理揭秘!,并结合git 图解,才感觉了解了一些 git 背后的故事。

因为 git 的命令和参数众多,初学者可以了解平常工作中经常用到的命令,并了解这个命令干了什么事,比起强行记住而不知所以要好得多,而且印象也要深刻得多。

以下便是我看完后的一些总结,看之前可先将以上两篇文章看完后再来阅读,如有不对,还请指正。

Git 的三个分区以及本地文件的三个阶段

1、三个分区

  • 工作目录 ( working directory ):操作系统上的文件,所有代码开发编辑都在这上面完成。
  • 索引( index or staging area ):可以理解为一个暂存区域,这里面的代码会在下一次commit被提交到Git仓库。
  • Git仓库( git repository ):由Git object记录着每一次提交的快照,以及链式结构记录的提交变更历史。

2、三个阶段

  • git add 之前:工作区文件修改,不对索引和 git 仓库有任何影响
  • git add 之后,git commit 之前:

在这个阶段,我之前的理解就是把工作区修改的(跟暂存区之间比较差异的)文件快照放到暂存区,等着提交到 git 仓库。现在的理解是基于 git 仓库里的实体来操作的。

实体对应文章里的对象 object

根据这才是真正的Git——Git内部原理揭秘!文章所说,git add 操作分为两步:

  1. 在 git 仓库产生类型为 blob 的实体
  2. 将暂存区对应文件的索引更新为类型为 blob 的实体的索引

blob 实体:存储文件内容

  • git commit 之后:同上分为三步
  1. Git 首先根据当前的索引生产一个类型为 tree 的实体,充当新提交的一个快照

tree 实体:存储目录结构、文件名以及权限

  1. 创建一个新的 commit 实体,将这次 commit 的信息储存起来,并且 parent 指向上一个 commit,组成一条链记录变更历史。

commit 实体:存储提交的作者、邮箱、日期、提交说明等。

在查看 commit 实体的内容 时除以上信息,还包含一个 tree 实体,再次查看 ** tree 实体的内容**,会发现包含一个或多个 blob 实体, 继续查看 blob 实体的内容,会发现具体的文件内容。

  1. 将当前分支的指针移到新的 commit 结点。

PS:除了以上三个实体,还有一个实体为 tag

tag 实体:存储指向特定提交对象(commit 实体)的引用

什么意思?
新建一个标签,取名 v1.0.0-release,它存储着 commit 实体的引用,通过命令

> git cat-file -p ebb56c // ebb56c 为 v1.0.0-release 保存的 commit 实体的引用,即 sha1的前几位字符

查看得到 commit 实体。

相关文章

  • git 原理初探

    前言 最近一直在研究 git 命令的操作效果,但总是感觉一知半解。自从看了知某平台文章这才是真正的Git——Git...

  • 小试 Xcode 逆向:App 内存监控原理初探

    小试 Xcode 逆向:App 内存监控原理初探小试 Xcode 逆向:App 内存监控原理初探

  • Flutter - Key的原理

    前言 上篇文章我们简单探索了Flutter的渲染原理---Flutter初探渲染原理初探[https://www....

  • ReactiveCocoa (RAC)

    一、RAC初探 二、RAC底层原理分析上 三、RAC底层原理分析下

  • Git学习记录:Notes for Codecademy

    Codecademy学习记录 Basic Git Workflow(Git工作流初探) git三大部分 编辑一份文...

  • VPN 应用构建

    VPN potatso原理解析 构建 NetworkExtension 应用 初探iOS Network Exte...

  • Spring Security Authentication (

    在 Spring Security Authentication (认证)原理初探 中已经介绍 Spring Se...

  • Git 初探

    首要配置 使用 Git 之前,需要先配置 user 信息,一个是用户名,一个是邮件地址。 那为什么要做这些配置呢?...

  • .git初探

    一、初识 .git cd .git cd objects cd fb fb和00b237e2d3c368fd26f...

  • git 初探

    本文要点:1. 版本管理的好处2. Git 的优点3. 配置 Git3.1. 配置开发者的信息3.2. 配置级别 ...

网友评论

      本文标题:git 原理初探

      本文链接:https://www.haomeiwen.com/subject/jqpdnctx.html