美文网首页
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 原理初探

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