Git基本概念、版本库、对象类型

1、版本库

Git版本库就像是一个数据库,其中包含所有用来维护与管理项目的修订版本和历史的信息。另外Git版本库不仅仅提供版本库中所有文件的完整副本,还提供版本库本身的副本。在版本库中Git主要维护两个数据结构,对象库和索引,并且所有这些数据都存放在工作目录根目录下一个名为.git的隐藏子目录中。

2、Git对象类型

2.1块(blob)
文件的每一个版本表示为一个块(blob),“块”这里指二进制对象,用来指代某些可以包含任意数据的变量或文件
2.2目录树(tree)
一个目录树对象代表一层目录信息,它记录blob标识符、路径名和在一个目录里所有文件的一些元数据。它也可以递归引用其他目录树或子树对象,从而建立一个包含文件和子目录的完整层次结构。
2.3提交(commit)
一个提交对象保存版本库中每一次变化的元数据,包括作者、提交者、提交日期、和日志消息。每一个提交对象指向一个目录树对象,这个目录树对象在一张完整的快照中捕获提交时版本的状态。最初的提交或者根提交是没有父提交的,另外大多数提交都有一个父提交。
2.4标签(tag)
一个标签对象分配一个任意的且人类可读的名字给一个特定的对象,通常是一个提交对象。

3、索引

索引是一个临时的、动态的二进制文件,它描述整个版本库的目录结构。更具体地说,索引捕获项目在某个时刻的整体结构的一个版本。
工作原理:当开发人员通过执行Gi命令在索引中暂存变更,变更一般是添加、删除、或者编辑某一个或某些文件。索引会记录和保存那些变更,保障它们的安全直到你准备好提交了,还可以删除或更换索引中的变更。

4、可寻址内容名称

Git对象库被组织及实现成一个内容寻址的存储系统。准确的说即使对象库中的每一个对象都有一个唯一的名称,这个名称是根据对象的内容应用SHA1得到的SHA1散列值,(这里补充一下:SHA1是安全哈希算法,它出现相同散列值的概率极低。)

5、Git追踪内容

Git追踪内容主要表现为两种关键的方式,首先,Git对象库基于对象内容的散列计算的值,而不是基于用户原始文件布局的文件名或目录名设置。也就是说如果两个文件的内容完全一样,无论是否在相同的目录,Git在对象库里只保存一份blob形式的内容副本,因为它们有相同的SHA1值,其次,如果这些文件中的一个发生了变化,Git会为它计算一个新的SHA1值,识别出它是一个不同的blob对象,然后将其添加到对象库里,原来的blob在对象库里保持不变,为没有变化的文件所使用。其次,当文件从一个版本变到下一个版本的时候,Git的内部数据库有效地存储每个我呢见的每个版本,而不是它们的差异。

6打包文件(pack file)

由于Git需要存储每个文件的每个版本,它并不是直接存储,而是用一种叫做打包文件的更有效的存储机制,要创建一个打包文件,Git首先定位内容非常相似的全部文件,然后为它们之一存储整个内容。之后计算相似文件的差异,并且只存储差异。
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

Master_Yoda

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值