文章目录
一、哈希算法
哈希是一个系列的加密算法,各个不同的哈希算法虽然加密强度不同,但是有以下
几个共同点:
①不管输入数据的数据量有多大,输入同一个哈希算法,得到的加密结果长度固定。
②哈希算法确定,输入数据确定,输出数据能够保证不变
③哈希算法确定,输入数据有变化,输出数据一定有变化,而且通常变化很大
④哈希算法不可逆
1.1·什么是不可逆算法?
我举个例子,一般的加密都会有秘钥,又或者是公钥私钥这些。但是不可逆算法它的秘钥并不是稳定的,所以你没办法逆转,只能暴力破解一个个测出它对应的秘钥。
这么说的你可能还会觉得很抽象。举个不可逆算法的例子吧:现在传进来的数据是1和2,我加密用的是它们之和的结果3,加密得到一个结果。下次不一定是1和2,可以是3和4,每次加密用的秘钥都不一样,所以是不可逆的。对比结果是否一致只能拿原始数据跟测试数据都经过不可逆算法的结果进行比较。
git就是这样靠SHA1加密算法这样的过程实现文件校验的
二、Git 保存版本的机制(对比说明)
2.1 集中式版本控制工具的文件管理机制
这里的版本控制是这样的,如果你要恢复到前面版本,那么它会将第一个版本的和之后做的修改拼起来。你每个版本只会记录修改的那部分。它们保存的是一组基本文件和每个文件版本之间的差异。
说明一下,第一个版本有A、B、C三个文件,2版本改了A、C,三版本改了C,四版本改了A、B,5版本改了B、C。
举个例子吧,现在假定要从5版本回退到3版本,那么
1版本的A + 2版本的A修改部分 = 新A,
1版本的B = 新B,
1版本的C + 2版本的C修改部分 + 3版本的C修改部分 = 新C
回退到的3版本由上面的新A新B新C构成。
2.2 Git 的文件管理机制
Git 把数据看作是小型文件系统的一组快照。每次提交更新时 Git 都会对当前的全部文件制作一个快照并保存这个快照的索引。为了高效,如果文件没有修改,Git 不再重新存储该文件,而是只保留一个链接指向之前存储的文件。所以 Git 的工作方式可以称之为快照流。
总结:有修改的文件直接保存为快照,如果文件没有修改就去找最近的版本对应文件,可以直接使用不需要拼接。
举例说明:
版本1有ABC三文件,2版本修改A和C,3版本修改了C,4版本修改了AB,5版本修改了BC。
现在要从5版本回退到3版本。
2版本的A =新A
1版本的B=新B
3版本的C=新C
回退到的3版本由上面的新A新B新C构成。每次都是快照,所以无需拼接起来了,直接拿对应版本的就好了即可,3版本的A快照其实是一个链接指向,链接到2版本的A啦
三、 Git 文件管理机制细节
3.1 Git 的“提交对象”
这里来说明一下,最右边的blob相当于你提交的单个文件,每一个文件都有其对应的哈希值,这个哈希值当然不止5b1d3这么点了。但是你一个版本的并不只有一个文件吧,这些文件组成了一个树对象,就是中间那个,里面包含了每个文件的哈希以及其文件名。然后到了最左边,这就是一个提交对象了,里面包含了作者和树对象等。
3.2 提交对象及其父对象形成的链条
这里就是每个版本的提交情况,像是链表一样,有父节点。
四、分支管理机制
其实很简单,我们的切换了分支其实也就是切换了指针罢了。所谓的git分支管理其实就是指针的创建与移动。
4.1 未创建分支前
这个时候我们已经迭代了三次,当前指向分支还是master
4.2 创建分支
创建分支的本质只是多了一个指针指向当前版本罢了
4.3 改变当前分支并迭代测试
改变当前分支指向
开始在feature-login分支上面迭代
然后我们切换回master分支
在master分支上面迭代