问答文章1 问答文章501 问答文章1001 问答文章1501 问答文章2001 问答文章2501 问答文章3001 问答文章3501 问答文章4001 问答文章4501 问答文章5001 问答文章5501 问答文章6001 问答文章6501 问答文章7001 问答文章7501 问答文章8001 问答文章8501 问答文章9001 问答文章9501

git的工作原理

发布网友 发布时间:2022-04-23 13:59

我来回答

1个回答

热心网友 时间:2023-08-09 20:33

        git的工作总共分四层,其中三层是在自己本地也就是说git仓库,包括了工作目录、暂存区和本地仓库。工作目录就是我们执行命令git init时所在的地方,也就是我们执行一切文件操作的地方;暂存区和本地仓库都是在.git目录下,因为它们只是用来存数据的。远程仓库在中心服务器,也就是我们做好工作之后推送到远程仓库,或者从远程仓库更新下来最新代码到本地。Git所存储的都是一系列的文件快照,然后git 来跟踪这些文件快照,发现哪个文件快照有变化他就会提示你需要添加到暂存区或是提交到本地仓库来保证你的工作目录是干净的。

         这个要怎么理解呢?git中的文件有两种状态,一种是被跟踪的,也就是提交到本地仓库的文件,因为本地仓库要保管它们当然要跟踪他们,对他们负责,还有一种就是未被跟踪的。那么当我们添加新的文件时,他不是被跟踪的,因为本地仓库里面没有这个文件,他是外来的,本地仓库目前还不需要对他们负责。但是如果是对仓库已经存在的文件进行修改,那么这些文件就是被跟踪的文件,就可以通过git status查看他们的状态来进行相应的操作。当然我们也可以生成一个.gitignore文件,里面指定要忽略的文件类型,然后这些文件就不会被跟踪,不管怎么改变他们,git status都不会提示你需要做什么操作。

        所以当我们在工作目录中进行文件操作后,要先添加到暂存区,然后再将暂存区中刚添加的文件快照提交到本地仓库,然后再将本地仓库的最新状态文件快照推送到远程仓库。这个文件快照其实就是各个文件在被添加到暂存区时的状态,就和照相的一样,留下每个不同时刻的快照,方便以后查询,而git存储的就是这些一系列的快照。说到这个快照就要说说git的对象了。

Git对象

     在.git-》Objects文件夹是一个个的git对象,是38位的哈希值,这样就意味着没有两个相同的对象名。

         从根本上讲,git是一套内容寻址的文件系统,它存储的也是key-value键值对,然后根据key值来查找value的,说到寻址就会想到指针吧,不错,git也是根据指针来寻址的,这些指针就存储在git的对象中。Git一共有四种对象,commit对象,tree对象和blob对象和tag对象,这里可以理解tag是commit的别名,下面便是这三个对象:

       每个目录都创建了“tree”对象, 每个文件都创建了一个对应的“blob”对象。最后有一个“commit”对象来指向根“tree”对象,这样我们就可以追踪项目每一项提交内容。

     

      这个blob对象对应的就是文件快照中那些发生变化的文件内容,而

      tree对象则记录了文件快照中各个目录和文件的结构关系,它指向了被跟踪的快照,

      commit对象则记录了每次提交到本地仓库的文件快照,

      从在开发过程中,我们会提交很多次文件快照,那么第一次提交的内容会用一个commit来记录,这个commit 没有指针指向上一个commit对象,因为没有上一个commit,他是第一个,当第二次提交时,又会有另外一个commit对象来记录,那么这次commit对象中就会有一个指针指向上一次提交后的commit对象,经过很多次提交后就会有很多的commit对象,它们组成了一个链表,当我们要恢复哪个版本的时候,只要找到这个commit对象就能恢复那个版本的文件。而我们所谓的HEAD对象其实就是指向最近一个提交的commit对象,也就是最后一个commit对象。
声明声明:本网页内容为用户发布,旨在传播知识,不代表本网认同其观点,若有侵权等问题请及时与本网联系,我们将在第一时间删除处理。E-MAIL:11247931@qq.com
儿童散学归来早描述的是什么季节(儿童散学归来早描写的是什么季节) 超级死神进化论章节目录 我们没有忘记读后感458字作文 贷15万贷10年每月还多少钱 15万10年贷款月供多少 15万贷10年月供多少钱 15万贷款10年一月多少钱 贷款15万10年每月还多少 在银行贷款15万十年还清想知道利息和月供……(还望亲们提供的的2013年... 今天去刷qq空间 看到了一个同学的头像 说明他发了说说 可是怎么刷新... 文件夹替代是整个文件夹替代吗 win7怎么直接替代文件夹 车子出险之后第二年保费是否会提高? 被法院纳入失信名单有什么后果 如果被法院列入失信名单,生活会怎么样呢? 个人被列入失信名单,会对生活造成哪些影响? 汽车出几次事故以上第二年的保险会增加? 车子出了点事故之后是不是第二年的保费要上交很多 被列入失信名单怎么办多久可以解除 汽车出险一次第二年保费会增加多少? 被列入失信名单之后,会对生活造成什么影响呢? 你好我车出险一次第二年按什么比例交保险,就是说多交多少 如果被列入了失信名单中,会给生活带来什么影响? 被列入失信人名单后对登记结婚有影响吗? 如果被列入失信人名单怎么办 被列入失信人员名单会怎样? 支付宝刷脸支付怎么取消 支付宝刷脸支付关闭方法 支付宝如何取消刷脸支付 支付宝怎样取消刷脸支付功能 如何关闭支付宝上的刷脸支付 文件夹被代替掉了 要手机报价OPPO的翻盖白色 git版本控制的原理,看书上的说的不是很能理解 新建文件夹可以替代手机自带文件夹吗? 现在OPPO白色翻盖手机多钱? 文件夹可以代替硬盘分区吗 如何从入门到系统的学习git的使用 OPPO新出来的那款白色翻盖手机是什么型号? 复制文件夹时为什么不能全部替换原文件夹的内容? 极客时间上的Git三剑客都讲了什么? 我想买步步高或者OPPO的手机?要白色翻盖的手机都有那些? 文件夹替代? 如何在 Git 里撤销任何操作 液态生料带的正确使用方法 oppoA520白色翻盖手机多少钱? 我将一个文件夹里的文件复制到另一个文件夹,电脑提示有相同的文件要替换吗?我选择不保留两个文件而是替 关于git和github版本管理的疑问,先谢谢大家了,80分~~ oppo手机U521怎么样,不好推荐个智能的翻盖白色的 液态生料带的使用方法 文件夹在磁盘上的替代名称?