美文网首页前端开发那些事儿
【学了就忘】Git原理 — 20.Git对象[tree对象](二

【学了就忘】Git原理 — 20.Git对象[tree对象](二

作者: 繁华似锦Fighting | 来源:发表于2021-05-02 00:06 被阅读0次

    3、总结

    (1)分析每个树对象的存储结构

    我们可以先查看一下Git本地库中的对象,如下

    .git/objects/01/ab2a43b1eb150bcf00f375800727df240cf653 # 第三个tree树对象
    .git/objects/0c/1e7391ca4e59584f8b773ecdbbb9467eba1547 # test.txt第二个版本(blob对象)
    .git/objects/16/3b45f0a0925b0655da232ea8a4188ccec615f5 # 第二个tree树对象
    .git/objects/83/baae61804e65cc73a7201a7252750c76066a30 # test.txt第一个版本(blob对象)
    .git/objects/d8/329fc1cc938780ffdd9f94e0d364e0ea74f579 # 第一个tree树对象
    .git/objects/fa/49b077972391ad58037050f2a75f74e3671e92 # new.txt第一个版本(blob对象)
    

    我们接下来用三个图,描述一下三个树对象的结构关系。

    第一个树对象结构如下图

    第二个树对象结构如下图


    第三个树对象结构如下图

    也可以换Git对象类型表示:


    (2)blob对象和tree对象(重点)

    从上图我们可以分析出:

    • blob对象代表文件一次次的版本。
    • tree对象代表项目的一次次的版本。

    这就是我前面2-(3)描述过的"Git版本库中的5个对象,即表示了项目的2个版本。"

    (就先这样理解)

    (3)总结(重点)

    暂存区的概念和相关理解:

    1. 所谓的暂存区Stage只是一个简单的索引文件而已。指的是是 .git/index文件。

    2. 暂存区这个索引文件里面包含的是文件的目录树,像一个虚拟的工作区,在这个虚拟工作区的目录树中,记录了文件名、文件的时间戳、文件长度、文件类型以及最重要的SHA-1值,文件的内容并没有存储在其中,所以说它像一个虚拟的工作区。

      即:暂存区,也就是.git/index文件中存放的是文件内容的索引(快照),也可以是tree对象的索引。

    3. 索引指向的是.git/objects/目录下的文件(Git对象)。

    4. Git通过暂存区的文件索引信息来创建tree对象的。

    5. tree对象可以使文件内容和文件名进行关联。

    6. 一个树对象可以包含一条或多条记录(tree对象和blob对象)。

    7. 暂存区内容写到版本库中后,暂存区索引内容不清空。

    8. 暂存区中的文件内容索引,是按对应文件覆盖的,也就是修改一个文件内容,添加到缓存区,只会把对应的文件覆盖,其他文件不会被覆盖,即:暂存区不是整体覆盖的。

    暂存区的作用:除非是绕过暂存区直接提交,否则Git想把修改提交上去,就必须将修改存入暂存区最后才能commit。每次提交的是暂存区所对应的文件快照。

    提示:Git对象的hash键,我们截取前几位就行,练习时对象不那么对,就不用全部都写,能够表示唯一对象就行。

    4、问题

    现在有三个树对象(因为执行了三次write-tree命令),分别代表了我们想要跟踪项目的三次快照。然而问题依旧:若想重用这些快照,你必须记住这三个树对象的SHA-1哈希值。

    并且,你也完全不知道是谁保存了这些快照,在什么时刻保存的,以及为什么保存这些快照。

    而以上这些,提交对象commit object为你保存了这些基本信息。

    5、本文用到的命令总结

    Git底层命令:

    • git update-index --add:把文件索引(快照)存入暂存区中。
    • git write-tree:将当前暂存区的索引内容同步到一个树对象中。
    • git ls-files -s:查看暂存区的文件信息。
    • git read-tree --prefix=bak:将一个已存在的树对象添加到暂存区。
    • git cat-file -t 键:查看Git对象的类型。
    • git cat-file -p 键:查看Git对象的内容。

    参考:

    相关文章

      网友评论

        本文标题:【学了就忘】Git原理 — 20.Git对象[tree对象](二

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