git原理

作者: 小张同学_loveZY | 来源:发表于2018-08-17 15:10 被阅读0次

    git 工作区与暂存区

    git-tree
    • 工作区: 就是我们看得到在写代码的地方
    • 版本库: git维护的区域,存放在.git中
    • git add 只是加到了stage中
    • git commit 将stage存放到master中

    .git目录分析

    git init 时,Git 会创建一个 .git 目录

    新建的git仓库的目录

    • HEAD
    • config
    • description
    • hooks
    • info
    • objects
    • refs

    老仓库的一个示例

    • HEAD:
      目前被检出的分支 例如:ref: refs/heads/f_zbq_gitlab-runner_20180817
    • config:
      项目特有的配置选项
    • description:
      gitweb用来显示对repo的描述
    • hooks/:
      钩子脚本,commit提交前后的执行
    • info/:
      全局性排除(global exclude)文件 .gitignore 中定义的文件
    • objects/: 存储所有数据内容
    • refs/:
      存储指向数据(分支)的提交对象的指针
    • index
      保存暂存区信息
    • logs/
      历史版本信息
    • packed-refs
    • COMMIT_EDITMSG

    git 对象内部存储

    Git 是一个内容寻址文件系统,其实就是一个键值对数据库。

    hash-object:命令存储数据对象,用值的hash值作为键存储数据

    cat-file: 通过键获得值

    git内部的数据组织为树结构,其中blob结构为文件,tree结构为文件夹,类似组合模式。

    git-tree

    内部指针关系图:


    git-refs

    分析

    概念分析:

    1. 工作区,stash区,master区

    2. 指针:指向对应的工作分支 | 提交分支,每一个分支又通过内部指针关系建立起饮用关系,形成如同树结构的形式。这里每一个数据都是通过hash保存的,键为SHA-1加密字符串。

    3. 引用:git通过命名引用来指向分支,功能和指针一样,但是提供了可读的理解字段。

    正常提交过程:

    • 1.编写本地的文件
    • 2.将文件通过git add 加入到stash中
    • 3.加入到stash中的所有文件通过git commit 加入到 master 中
    • 4.git push 上传数据

    回滚过程:

    • 通过refs名定位到内部的refs,然后用引用代替掉HEAD,从而实现回滚

    • git diff 比较几个不同引用的内容值,输出结果

    等等等等。。。。。

    相关文章

      网友评论

          本文标题:git原理

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