文章目录
1、哈希
哈希是一个系列的加密算法 各个不同的哈希算法虽然加密强度不同
几个共同点:
①不管输入数据的数据量有多大 使用同一个哈希算法 得到的加密结果长度固定
②哈希算法确定 输入数据确定 输出结果保证不变
③哈希算法确定 输入数据有变化 输出结果一定有变化 而且通常变化很大
④哈希算法中不区分英文大小写
⑤哈希算法不可逆
Git 底层采用的是 SHA-1 算法
2、Git保存版本的机制
(1)集中式版本控制工具(如SVN)的文件管理机制
以文件变更列表的方式存储信息。这类系统将它们保存的信息看作是一组基本文件(对应下图的Version1)和每个文件随时间逐步累积的差异(对应下图的其他Version),在文件管理的时候只保存当前版本相对于上一个版本的差异,这是一种增量式的版本控制
(2)Git 的文件管理机制
Git 把数据看作是小型文件系统的一组快照。每次提交更新时 Git 都会对当前的全部文件制作一个快照并保存这个快照的索引。为了高效,如果文件没有修改,Git 不再重新存储该文件,而是只保留一个链接指向之前存储的文件。所以 Git 的工作方式可以称之为快照流。
下图中Version2及其之后的实线框中的文件表示该版本的该文件相较于上个版本有变动,虚线框中的文件表示该版本的该文件相较于上一版本没有变动(只保存上一个版本的指针,而无需保存文件),这样根据当前版本的文件和指向上一版本的指针就可以找到该版本的所有文件的状态
(3)Git 文件管理机制细节
Git 的提交对象
提交对象及其父对象形成的链条
3.Git的分支管理机制(依赖于指针的变化)
(1)分支的创建:创建一个指向HEAD当前指向的分支的当前版本的指针
注意:此时HEAD指向master分支的f30ab版本,那么新创建的testing分支的指针也会指向master分支的f30ab版本,实际上是创建的分支的指针会指向HEAD指针指向的分支所在的版本
(2)分支的切换:仅仅是改变HEAD指针的指向
注意:切换分支时,仅仅是切换一下HEAD指针的指向,从原分支指向想切换的分支
(3)版本的提交
注意:若此时在testing分支上提交了版本,则只会使该分支的指针向后移动,不会影响其他分支,如上图所示,其他分支的指针指向并没有发生变化
(4)冲突的产生
注意:在testing分支修改后,再将HEAD切换至master,然后在master上修改相同的文件,然后再master分支上提交,就会形成下面的局面:这时就有可能产生冲突,这合并版本的时候就需要解决冲突
总结
1.Git引用是指向git对象hash键值的类似指针的文件
2.通过Git引用,我们可以更加方便的定位到某一版本的提交
3.Git分支是基于Git引用实现的
4.Git保存文件的完整内容,不保存差量变化。
5.Git以储键值对(key-value)的方式保存文件。
6.每一个文件,相同文件的不同版本,都有一个唯一的SHA-1 校验和与之对应。
7.SHA-1 校验和是文件的指针,Git依靠它来区分文件。
8.每一个文件都会在Git的版本库里生成对象来保存。
9.对于没有变化的文件,Git只会保留上一个版本的指针。
10.Git实际上是通过维持复杂的文件来实现版本控制的。
11.使用Git的工作流程基本就是就是文件在三个工作区域之间的流动。
12.大量使用分支进行团队协作。
13.分支只是对提交对象的一个引用。