开启生长之旅!这是我参加「日新方案 12 月更文挑战」的第20天,点击检查活动概况

在.git文件中咱们经过git cat-file -t指令,能够检查文件类型.然后就引出了咱们的主角blob目标.上文中侧重点在于解说.git文件变化.今天咱们好好欣赏一下新目标blob.

您能在这里看到啥

  • Git目标
  • blob目标

Git目标

  • 引言

    Git是一个内容寻址文件体系,Git的核心部分就是一个简略的键值对数据库.你能够向Git库房刺进恣意类型的内容.它会回来一个仅有的键.经过该键可哟在恣意时间再次取回该内容.

  • Git目标类型有四种:

    • 数据目标– blob
    • 树目标– tree
    • 提交目标– commit
    • 标签目标 – tag

    经过上面的四种目标搭建起了Git数据结构

blob目标

  • blob目标意义

    blob目标又名数据目标

    数据目标的发生是在使用git add指令,将文件或者目录参加暂存区-staging时发生的.

    目标实质就是二进制的数据文件.只包括文件的内容,并不存储文件名文件权限.

    文件名将在tree目标中存储

  • blob目标存储方法

    Git目标中,咱们知道Git的核心部分是键值对数据库.blob目标也不破例.这里我就直接引证网上的图了,如下所示

    Git “对象”之blob

  • blob目标存储方法及方位

    • 存储方位

      在学习.git文件的时分.咱们知道.git文件结构如下所示

       **.**
       ├── COMMIT_EDITMSG
       ├── HEAD
       ├── config
       ├── description
       ├── **hooks**
       ├── index
       ├── **info**
       ├── **logs**
       ├── **objects**
       └── **refs**
      

      当履行过git add指令后,这时分咱们去.git/objects/目录下,就会看到一个文件76/2c98e3.如下所示

      Git “对象”之blob

      由此咱们能够知道blob目标是存储在.git/objects/目录下.

    • 目标存储方法

      Git目标的的键使用40位的16进制数表示的.即SHA-1散列值.如762c983e33c2968ef90e5504c584a47f54a5c9c8

      .git/objects文件中,咱们不难发现.文件是由散列值前两位字符76用于命名子目录.剩余38字符串为文件名.

  • 检查blob目标内容

    • cat指令来检查对应内容.
      cat .git/object/76/2c983e33c2968ef90e5504c584a47f54a5c9c8
      xK??OR04`x?1????=GS **%**
      

      从上面的实战中,发现是乱码.为啥是乱码的.主要是咱们的文件内容显现经过zlib紧缩,然后将zlib紧缩后的内容写入磁盘文件.所以咱们不能简略的经过cat指令获取内容.需要用git提供的指令获取内容

    • git cat-file
      • 检查blob目标的内容
        git cat-file -p 762c983e
        初始化
        
      • 检查目标类型
          git cat-file -t 762c983e
          blob
        
  • Git底层指令创立blob目标

    git hash-object能够将恣意数据保存到./git/object目录下,虽然咱们能够经过git add也能完成.但多学一种方法,总是有用的.相对来说git add是归于高档指令,而真正干事的仍是git hash-object这种更底层的指令.

    echo "hellow" | git hash-object -w --stdin
    4f6caba6e267fd5ddbc3e49af8843a1af1ab0793
    

    参数阐明:

    参数 阐明
    -w 回来键(SHA-1),并将该内容得到blob目标写入到.git/objects文件中.
    --stdin 规范输入读取内容
  • blob目标取回数据

    在上面git cat-file使用案例中,咱们能够获取blob目标内容.现在咱们利用它再取回被删除的内容.如下所示

    Git “对象”之blob

系列文章

  • Git 通用指令-.git文件学习(一)

学习材料

  • Git目标
  • 深入理解Git