• Git系列之(一)Git对象


    image

    (一)Git 目录

    image

    对于这些文件和目录,下面给出了一些基本的描述。
    hooks:这个目录存放一些shell脚本,可以设置特定的git命令后触发相应的脚本;在搭建gitweb系统或其他git托管系统会经常用到hook script
    info:包含仓库的一些信息
    logs:保存所有更新的引用记录
    objects:所有的Git对象都会存放在这个目录中,对象的SHA1哈希值的前两位是文件夹名称,后38位作为对象文件名
    refs:这个目录一般包括三个子文件夹,heads、remotes和tags,heads中的文件标识了项目中的各个分支指向的当前commit
    COMMIT_EDITMSG:保存最新的commit message,Git系统不会用到这个文件,只是给用户一个参考
    config:这个是GIt仓库的配置文件
    description:仓库的描述信息,主要给gitweb等git托管系统使用
    index:这个文件就是我们前面提到的暂存区(stage),是一个二进制文件
    HEAD:这个文件包含了一个档期分支(branch)的引用,通过这个文件Git可以得到下一次commit的parent
    ORIG_HEAD:HEAD指针的前一个状态

    (1.1)查看index文件内容(git ls-files --stage)

    image

    (1.2)查看HEAD指向的目录树(git ls-tree -l head)

    image

    (二)基本对象类型
    Git中有四种基本对象类型,组成了Git更高级的数据结构:
    blobs:每个blob代表一个(版本的)文件,blob只包含文件的数据,而忽略文件的其他元数据,如名字、路径、格式等。
    trees:每个tree代表了一个目录的信息,包含了此目录下的blobs,子目录(对应于子trees),文件名、路径等元数据。因此,对于有子目录的目录,git相当于存储了嵌套的trees。
    commits:每个commit记录了提交一个更新的所有元数据,如指向的tree,父commit,作者、提交者、提交日期、提交日志等。每次提交都指向一个tree对象,记录了当次提交时的目录信息。一个commit可以有多个(至少一个)父commits。
    tags:tag用于给某个上述类型的对象指配一个便于开发者记忆的名字, 通常用于某次commit。
    在.git/objects/中存储了所有的对象,如用命令($ find ./.git/objects -type f)
     image

    用命令:git cat-file -t <SHA1>,git cat-file -p <SHA1>可以分别查看对象的值和内容。一般地,使用SHA1值的前面几位(而不是全部)就可以区分不同的对象。

    image

    (2.2) 对象之间的关系链

    从下图可以看出:

    add操作首次会添加一个index文件,在Git中将其定义为暂存区,实际是一个二进制文件存储内容为:工作区中需要版本控制的文件清单,格式见上图。

    ② 再次add会修改index文件。commit操作不会更改index文件。

    ③ 从图中可以看到在master分支上的一条提交链。每次commit都会产生tree,commit,blob彼此组成一个链式结构。(见图6-1)

    image

    image

    (三)Git分支与对象的关系

    ①:创建分支(bra)时相当于在/refs/heads目录下生成一个bra文件用来记录最后一次提交(commit)的ID。

    ②:首次创建分支时/refs/heads/bra存的信息为基分支的最后一次提交ID

    ③:切换分支到bra时会改变.git/HEAD文件中的值:ref: refs/heads/bra

    image

    https://www.cnblogs.com/liyropt/archive/2012/12/11/2812194.html

    https://www.cnblogs.com/zhongxinWang/p/4235448.html

  • 相关阅读:
    JS知识点整理
    CSS3疑难问题---6、伪类和伪元素的区别
    人物志---宋霭龄
    范仁义js课程---4、js基本注意点
    legend3---24、软件更新的时候记得保留上两个版本的软件和数据
    心得体悟帖---200215(被动录课效率太低了)
    Java中迭代列表中数据时几种循环写法的效率比较
    Win10
    Java字符串的最大长度
    Android Application对象必须掌握的七点
  • 原文地址:https://www.cnblogs.com/lihuali/p/10520216.html
Copyright © 2020-2023  润新知