一,git对象

Git 的核心部分是一个简单的键值对数据库。你可以向该数据库插入任意类型的内容,它会返回一个键值,通过该键值可以在任意时刻再次检索该内容。

向数据库写入内容 并返回对应键值

命令:
echo ‘test content’ | git hash-object -w --stdin

  • -w 选项指示 hash- - object 存储数据对象;若不指定此选项,则该命令仅返回对应的键值,而不会存储数据对像。
  • - -stdin ( standard input ) 选项则指示该命令从标准输入读取内容;若不指定此选项 ,则须在命令尾部给出待存储文件的路径 。
  • git hash- object -w 文件路径: 存文件
  • git hash-object 文件路径
    返回对应文本的键值d670460b4b4aece5915caf5c68d12f560a9fe3e4
  • 返回:
    该命令输出一个长度为 40 个字符的校验和。 这是一个 SHA-1哈希值。

例一:
在这里插入图片描述
这里输出的d670460b4b4aece5915caf5c68d12f560a9fe3e4就是内容“test content”对应哈希值(内容对应的唯一标识)。
整个数据库,他会根据你的内容不一样,给你生成不一样的哈希值。
此时,因为没有家-w,所以内容并没有存入数据库:
在这里插入图片描述
在这里插入图片描述
此时则写入数据库了:
在这里插入图片描述

可以看到,已经写入数据库了。
在这里插入图片描述
利用cat命令查看写入的内容,却发现是乱码,这是因为写入的东西是经过压缩的,想要读取,还得借助其他命令行:
在这里插入图片描述
这样就读取出来了!
于是git对象实际上是key:value组成的键值对(key是hash对应的hash),而且键值对在git内部是一个blob类型。

二, 查看 Git 如何存储数据

命令:
find ./.git/objects - -type f
返回:
./.git/objects/d6/70460b4b4aece5915caf5c68 d12f560a9fe3e4
这就是开始时 Git 存储内容的方式 : 一个文件对应一条内容 。前面两个字符用于命名子目录,余下的 38 个字符则用作文件名。
根据键值拉取数据
命令
git cat-file -p d670460b4b4aece5915caf5c68d12f560a9fe3e4
-p 选项可指示该命令自动判断内容的类型,并为我们显示格式友好的内容。
返回
对应文件的内容

三,还可以对一个文件进行简单的版本控制

Git 对象 blob 对象 tree 对象 commit 对象 tag 对象 Git 是一个内容寻址文件系统, Git 的核心部分是一个简单的键值对数据库(key-value data store)。 你可以向 Git 仓库中插入任意类型的内容,它会返回一个唯一的键,通过该键可以在任意时刻再次取回该内容。存储在 Git 仓库中的内容我们通常称为 Git 对象 Git 对象 有四种类型,分别是blob、tree、commit、tag。 Git 通过这四种类型的 对象 实现被纳入 Git 管理的文件的增删改查。每个 git 对象 都有唯一确定的hash值,G 一旦你将内容存储在了 对象 数据库中,那么可以通过cat-file命令从 Git 那里取回数据。 这个命令简直就是一把剖析 Git 对象 的瑞士军刀。 为cat-file指定-p选项可指示该命令自动判断内容的类型,并为我们显示大致的内容: $ git cat-file -p d670460b4b4aece5... 文章摘选自 git 官网,这里复制下来表示我已阅读并 学习 过一次这些内容: 无论是从之前的章节直接跳到本章,还是读完了其余章节一直到这——你都将在本章见识到 Git 的内部工作原理和实现方式。 我们发现 学习 这部分内容对于理解 Git 的用途和强大至关重要。不过也有人认为这些内容对于初学者而言可能难以理解且过于复杂。 因此我们把这部分内容放在最后一章,在 学习 过程中可以先阅读这部分,也可以... ​ **什么是版本控制?**版本控制是一种记录一个或若干文件内容变化,以便将来查阅特定版本修订情况的系统。 ​ **为什么要使用版本控制?**在软件开发中采用版本控制系统是个明智的选择。有了它可以将某个文件回溯到之前的状态,也可以将整个项目回退到过去某个时间点的状态。 集中式(svn) svn因为每次存的都是差异 需要的硬盘空间会相对的小一点 可是回滚的速度会很慢 代码存放在单一的服务器上 便于项目的管理 服务器宕机: 在宕机期间,无法协同工作 集中化的版本控制系统诸如 CVS,svn 以及 Perforce 等,都有一个单一的集中管理的服务器,保存所有文件的修订版本,而协同工作的人们都通过客户端连到这台服务器,取出最新的文件或者提交更新。 文章目录 git 原理概述 git objectblob objecttree objectcommite object Git ReferencesTagRemotepakcfilesrefspecTransfer Protocolsdumb protocolsmart protocoluploading datadownload dataMaintenanceData Recovery git 原理 首先,我们执行 git init命令初始化一个新的仓库(repository),该命令会产生一个. git 文件夹