最新公告
  • 欢迎您光临起源地模板网,本站秉承服务宗旨 履行“站长”责任,销售只是起点 服务永无止境!立即加入钻石VIP
  • git 原理分析

    正文概述 掘金(无痕运行)   2021-02-04   458

    一、正面角度,从init到add到commit

     一、基本理解操作篇
    1、git init // 此时,查看.git里面的内容
    2、添加一些内容,如a.j中添加,然后git add . // 再查看.git里面的内容(发现多了Index及objects里面多了一个文件夹)
    //通过命令来查看这个二进制文件里面存储的是什么内容
    3、查看Index内容:git ls-files -s
    4、查看某个hash名对应的内容:git cat-file -p 这里为Hash值
    
    // 总结:
    1、git add 命令背后逻辑为:
    // ① 文件内容存储在Objects文件内,hash前两位为文件夹名称,后面剩余的38位为文件名称
    // ② index中记录最新的hash值
    
    2、可以发现,,其实git就是key-value形式
    记录的是hash值,然后通过hash值找到存储在objects中对应的该内容(value内容)
    index记录暂存区用的是哪些hash组成的文件(key值)
    

    git 原理分析 git 原理分析 git 原理分析 git 原理分析 git 原理分析 git 原理分析

    二、hash生成规律篇及多次add 做了什么
    1、a.js继续添加,然后git add . // 查看Index内容:git ls-files -s
    2、增加b.js及大量内容,然后git add . // 查看Index内容:git ls-files -s
    3、在b.js中增加少了内容然后git add . // 可以发现不是在之前基础上的+改动。而是此时完整的内容
    
    // 总结:
    1、hash值是和该文件的内容相关的,内容不变,hash值也不会变,也不会额外生成hash内容
    2、index记录的是此次add的所有文件的最新Hash值,没有修改的部分,计算出来的hash不变
    3、add相当于会对修改的文本,做一次内容拷贝
    

    git 原理分析 git 原理分析 git 原理分析 git 原理分析 git 原理分析 git 原理分析

    三、git commit -m 做了什么
    1、git commit -m "init"
    2、再次add . 再次commit 看效果
    // 查看 commit 后会生成提交hash,对应我们可以看该Hash内容
    // 查看Index内容:git ls-files -s
    // 查看.git\refs\heads\master内容,发现保存的是最新的提交commit对应的hash值
    
    // 总结:
    1、git commit 会生成一个提交的hash
    2、内容有tree,parent,提交用户,提交时间,提交message等。
    3、其中tree记录的是此时暂存区index的内容
    4、parent记录的是上个commit节点的Hash值(链式查找)
    5、这个key存储在当前分支树那里,即当前为.git\refs\heads\master那里
    
    // 即:commit是将此次的index暂存区的内容作为快照
    // 加上提交的其它信息,生成一个提交记录(有Hash名,和objects中的内容存储)
    

    git 原理分析 git 原理分析 git 原理分析 git 原理分析

    四、查看git commit --amend 做了什么
    1、添加内容 git add .
    2、git commit --amend
    
    // 查看
    // 1、发现生成了新的commit信息(hash key和value)
    // 2、.git\refs\heads\master记录的是新的hash
    // 3、查看内容,parent和之前commit节点指向的是同一个,说明是修改当前提交节点信息,而不是新建
    
    // 总结
    // 相当于修改当前提交tree,而不是创建新的commit节点
    

    git 原理分析 git 原理分析

    五、切换分支,看做了什么事情
    1、git checkout -b feature/1
    
    // 查看
    // 1、HEAD文件内容:ref: refs/heads/feature1 // 这里记录的是当前指向节点在哪
    // 2、到.git\refs\heads\feature1 直接查看内容,发现是从切出位置的提交commmit对应hash值
    

    git 原理分析 git 原理分析 git 原理分析 git 原理分析

    二、从逆向角度,撤销角度出发分析(我觉得用恢复比较好理解)

    一、恢复工作区(从暂存区回退)
    

    git 原理分析 git 原理分析 git 原理分析

    二、恢复暂存区(从commit回退)
    我们发现,因为每次add,其实没有生成新的节点来记录,只是修改Index
    所以,不能恢复多次add后的某个add阶段!
    即:多次add,恢复是从commit来恢复的,所以恢复到第0个add阶段,而不能恢复到第n个恢复阶段
    

    git 原理分析 git 原理分析

    三、从远程仓库恢复
    

    起源地下载网 » git 原理分析

    常见问题FAQ

    免费下载或者VIP会员专享资源能否直接商用?
    本站所有资源版权均属于原作者所有,这里所提供资源均只能用于参考学习用,请勿直接商用。若由于商用引起版权纠纷,一切责任均由使用者承担。更多说明请参考 VIP介绍。
    提示下载完但解压或打开不了?
    最常见的情况是下载不完整: 可对比下载完压缩包的与网盘上的容量,若小于网盘提示的容量则是这个原因。这是浏览器下载的bug,建议用百度网盘软件或迅雷下载。若排除这种情况,可在对应资源底部留言,或 联络我们.。
    找不到素材资源介绍文章里的示例图片?
    对于PPT,KEY,Mockups,APP,网页模版等类型的素材,文章内用于介绍的图片通常并不包含在对应可供下载素材包内。这些相关商业图片需另外购买,且本站不负责(也没有办法)找到出处。 同样地一些字体文件也是这种情况,但部分素材会在素材包内有一份字体下载链接清单。
    模板不会安装或需要功能定制以及二次开发?
    请QQ联系我们

    发表评论

    还没有评论,快来抢沙发吧!

    如需帝国cms功能定制以及二次开发请联系我们

    联系作者

    请选择支付方式

    ×
    迅虎支付宝
    迅虎微信
    支付宝当面付
    余额支付
    ×
    微信扫码支付 0 元