zoukankan      html  css  js  c++  java
  • Git原理学习记录

    Git原理学习记录

    1.git init git-test

    image-20210127081614729

    git init 实际上就是在特定的目录下创建对应的目录和文件

    2.object

    $ echo "V1" > file.txt
    $ git hash-object -w file.txt
    998a6f80eb9feed5d5a7b2b56c41e91961807a52 
    //将file.txt的内容以一个object的形式添加进object数据库中,该hash值对应着这个object
    
    $ find .git/objects/ -type f #type用于制定类型,f表示文件
    .git/objects/99/8a6f80eb9feed5d5a7b2b56c41e91961807a52
    在object 下多出一个99文件夹,git以Hash前两个字符作为目录名,后38作为文件名,存在object数据库中。
    $ git cat-file -p 998a
    V1
    $ git cat-file -t 998a
    blob
    #blob是一种存放二进制文件的容器,是数据库中用来存储二进制文件的字段类型
    
    
    #更新文件
    $ cat "v2" > file.txt
    $ git hash-object -w file.txt
    beef424daef9c4eeedd52f6b12d46ee7e0fcf1da
    $ find .git/objects -type f
    

    image-20210127085040475

    #恢复版本
    

    image-20210127085232169

    可以看出,Git的版本控制就是将每个版本文件都保存到一个object数据库中,如果想要恢复上个版本,git cat-file -p 998a > file.txt即可恢复。

    #注意
    1.为什么不直接cat查看数据库内容,而是编写git cat-file
       因为git不能将文件内容直接保存进object,而是进行了压缩,所以无法直接查看.
    2.一个object的存储内容:
    

    image-20210127085802709

    git cat-file刚好相反,先把object文件中存放的数据用zlib进行解压,根据空格和空字节对解压后的数据进行划分,根据参数-t或-p返回object的内容或类型

    转载请标明,谢谢
  • 相关阅读:
    gcc编译常用选项
    汇编指令随笔
    VIM简单操作
    Linux编译阻塞型驱动遇到'TASK_NORMAL' undeclared (first use in this function)问题解决办法
    Linux中断流程分析
    Linux驱动开发之LED驱动
    函数(三)
    函数(二)
    文件和函数(一)
    文件处理和字符编码
  • 原文地址:https://www.cnblogs.com/guapilsh/p/14439941.html
Copyright © 2011-2022 走看看