zoukankan      html  css  js  c++  java
  • 【git】git的内部原理

    参考文章:https://zhuanlan.zhihu.com/p/96631135

    参考文章:https://marklodato.github.io/visual-git-guide/index-zh-cn.html

    PART 1 git内部存储信息的方式

    在.git/objects里面有几种objects

    blob: 节点,只储存文件内容,不包含文件名信息,在add之后就会存在,对象文件名是SHA值。

    tree: 树,当前目录结构的快照,每一个文件 / 文件夹 的 权限 / 类型 / SHA值 / 文件名。

    commit: 提交,tree的SHA值,上一个提交的SHA值,提交的作者和具体时间,提交的信息

    分支信息位置

    cat .git/HEAD

    cat .git/refs/heads/master 会指向一个提交对象

    PART 2 三个分区如何变更

    三分区:

    工作目录: working deriectory: 操作系统上的文件

    索引 / 暂存区:Index / stage: 存着一个索引,这个索引可以认为是一个tree,而储存下来的tree对象是该索引的快照。在.git/index 文件中保存。

    仓库:repository: 记录每一次提交

    之间相互转换的关系:

     

    git add:建立blob对象,更新索引(将文件指向新的对象)

    git commit: 根据当前索引生成一个tree对象,创建一个新的commit对象,由之前的commit对象生成,组成一条变更历史。

    Q & A

    Q:git储存的是文件快照还是变更部分?

    A:文件快照。哪怕修改一点也是全新的一个blob。checkout commit很方便,

      另外git还有垃圾回收机制,会清楚无用的object, 还会把相似的打包压缩。

    Q:git checkout到底是啥意思?

    A:有两种用法:

      git checkout sth: 切换分支,把HEAD指向某个commit对象,这个commit对象可以是SHA值确定的,也可以是分支确定的,

      eg.  git checkout HEAD^ 切换到当前HEAD的上一个提交

        git checkout 244006 切换到SHA为244006的commit对象

        git checkout master 切换到master分支对应的提交

      git checkout sth somefile: 并不切换HEAD的指向,而只是把某个文件恢复到某个状态。

    Q:git reset是啥意思?

    A:将当前的分支指向另一个提交。

  • 相关阅读:
    Python for Data Science
    Python for Data Science
    Python for Data Science
    Python for Data Science
    Python for Data Science
    Python for Data Science
    Python for Data Science
    Python for Data Science
    Python for Data Science
    软件工程实践总结
  • 原文地址:https://www.cnblogs.com/yesuuu/p/12057379.html
Copyright © 2011-2022 走看看