【Git】git存储结构

git存储结构
一、分层结构二、Git对象目录结构演示
三、执行过程

参考文章:git内部原理

git 是一套内容寻址文件系统,从内部来看,git 是简单的 key-value 数据存储。它允许插入任意类型的内容,并会返回一个键值,通过该键值可以在任何时候再取出该内容。

一、分层结构

【Git】git存储结构
  git的工作总共分四层,其中三层是在自己本地的git仓库,包括了工作目录,暂存区和本地仓库,工作目录就是我们执行命令git init时所在的地方,也是执行一切文件操作的地方,暂存区和本地仓库都是在.git目录,因为它们只是用来存数据的。远程仓库在中心服务器,也就是我们做好工作之后推送到远程仓库,或者从远程仓库更新下来最新代码到我们的git仓库。git所存储的都是一系列的文件快照,然后git来跟踪这些文件快照,发现哪个文件快照有变化它就会提示你需要添加到暂存区或是提交到本地仓库来保证你的工作目录是干净的。
  这个怎么理解呢,git中的文件有两种状态,一种是被跟踪的,也就是提交到本地仓库的文件,因为本地仓库要保管它们,所以得跟踪他们,第二种未被跟踪的。那么当我们添加新的文件时,它不是被跟踪的,因为本地仓库里面没有这个文件,它是外来的,在git commit之前本地仓库还不需要对他们负责。但是如果是对仓库已经存在的文件进行修改,那么这些文件就是被跟踪的文件,就可以通过git status查看他们的状态来进行相应的操作。当然我们也可以生成一个.gitignore文件,里面指定要忽略的文件类型,然后这些文件就不会被跟踪,也不会被提交。
  在工作目录中进行文件操作后,要先添加到暂存区,然后再将暂存区中刚添加的文件快照提交到本地仓库,然后再将本地仓库的最新版本文件快照推送到远程仓库。这个文件快照其实就是各个文件的在被添加到暂存区时的状态,就和照相一样的,留下每个不同时刻的快照,方便以后查询,而git存储的就是这些一系列的快照。说到这个快照就要说说git的对象了。

二、Git对象
目录结构

    从根本上讲,git是一套内容寻址的文件系统,它存储的也是key-value键值对,然后根据key值来查找value的,说到寻址就会想到指针,git也是根据指针来寻址的,这些指针就存储在git的对象中。git一共有3种对象,commit对象,tree对象和blob对象。
【Git】git存储结构
    blob是最小的存储单元,对应的就是文件快照中那些发生变化的文件内容;tree对象则记录了文件快照中各个目录和文件的结构关系,它指向了被跟踪的快照;commit对象则记录了每次提交到本地仓库的文件快照。
  从上图看出commit会有两个指针,一个指向tree对象,一个则指向上一个commit对象。在开发过程中,我们会提交很多次文件快照,那么第一次提交的内容会用一个commit来记录,这个commit没有指针指向上一个commit对象,因为没有上一个commit,它是第一个,当第二次提交时,又会有另外一个commit对象来记录,那么这次commit对象中就会有一个指针指向上一次提交后的commit对象,经过很多次提交后就会有很多的commit对象,它们组成了一个链表,当我们要恢复哪个版本的时候,只要找到这个commit对象就能恢复那个版本的文件。而我们所谓的HEAD对象其实就指向最近一个提交的commit对象,也就是最后一个commit对象。

演示

    所有的提交都存储在这两个文件夹【Git】git存储结构删除hooks便于观察(rm -rf .git/hooks)【Git】git存储结构add到暂存区后会生成对应的hash值【Git】git存储结构查看add的文件类型为blob【Git】git存储结构输出blob中的内容【Git】git存储结构commit之后.git文件下会再次生成两个文件,一个是tree、一个是commit记录【Git】git存储结构三个文件类型如下,文件的内容【Git】git存储结构修改1.txt中的内容再次commit,还会生成一组commit、tree、blob【Git】git存储结构commit(作者、信息、上一个commit的指针) > Tree(文件名称、文件内容) > blob(提交的数据),如下所示:

commit:它储存的是一个提交的信息,包括对应目录结构的快照tree的哈希值,上一个提交的哈希值(这里由于是第一个提交,所以没有父节点。在一个merge提交中还会出现多个父节点),提交的作者以及提交的具体时间,最后是该提交的信息。【Git】git存储结构
Tree:从它储存的内容来看可以发现它储存了一个目录结构(类似于文件夹),以及每一个文件(或者子文件夹)的权限、类型、对应的身份证(SHA1值)、以及文件名【Git】git存储结构
blob:它只储存的是一个文件的内容,不包括文件名等其他信息。然后将这些信息经过SHA1哈希算法得到对应的哈希值:a8b136da1d43a350901e4131bae78826d193d8,作为这个object在Git仓库中的唯一身份证。

三、执行过程

【Git】git存储结构

原创:https://www.panoramacn.com
源码网提供WordPress源码,帝国CMS源码discuz源码,微信小程序,小说源码,杰奇源码,thinkphp源码,ecshop模板源码,微擎模板源码,dede源码,织梦源码等。

专业搭建小说网站,小说程序,杰奇系列,微信小说系列,app系列小说

【Git】git存储结构

免责声明,若由于商用引起版权纠纷,一切责任均由使用者承担。

您必须遵守我们的协议,如果您下载了该资源行为将被视为对《免责声明》全部内容的认可-> 联系客服 投诉资源
www.panoramacn.com资源全部来自互联网收集,仅供用于学习和交流,请勿用于商业用途。如有侵权、不妥之处,请联系站长并出示版权证明以便删除。 敬请谅解! 侵权删帖/违法举报/投稿等事物联系邮箱:2640602276@qq.com
未经允许不得转载:书荒源码源码网每日更新网站源码模板! » 【Git】git存储结构
关注我们小说电影免费看
关注我们,获取更多的全网素材资源,有趣有料!
120000+人已关注
分享到:
赞(0) 打赏

评论抢沙发

  • 昵称 (必填)
  • 邮箱 (必填)
  • 网址

您的打赏就是我分享的动力!

支付宝扫一扫打赏

微信扫一扫打赏