Git基本原理-hash算法
一、哈希
哈希是一个系列的加密算法,各个不同的哈希算法虽然加密强度不同,但是有以下几个共同点:
①不管输入数据的数据量有多大,使用同一个哈希算法,得到的加密结果长度固定
②哈希算法确定,输入数据确定,输出结果保证不变
③哈希算法确定,输入数据有变化,输出结果一定有变化,而且通常变化很大
④哈希算法不可逆
⑤哈希算法中不区分英文大小写
哈希算法有很多种,如:MD5、SHA-1等。Git 底层采用的是 SHA-1 ,因为哈希算法可以被用来验证文件,Git 就是靠这种机制来从根本上保证数据完整性的
二、Git保存版本的机制
1、集中式版本控制工具(如SVN)的文件管理机制:以文件变更列表的方式存储信息。这类系统将它们保存的信息看作是一组基本文件(对应下图的Version1)和每个文件随时间逐步累积的差异(对应下图的其他Version),在文件管理的时候只保存当前版本相对于上一个版本的差异,这是一种增量式的版本控制
2、Git 的文件管理机制:Git 把数据看作是小型文件系统的一组快照。每次提交更新时 Git 都会对当前的全部文件制作一个快照并保存这个快照的索引。为了高效,如果文件没有修改,Git 不再重新存储该文件,而是只保留一个链接指向之前存储的文件。所以 Git 的工作方式可以称之为快照流。下图中Version2及其之后的实线框中的文件表示该版本的该文件相较于上个版本有变动,虚线框中的文件表示该版本的该文件相较于上一版本没有变动(只保存上一个版本的指针,而无需保存文件),这样根据当前版本的文件和指向上一版本的指针就可以找到该版本的所有文件的状态
Git 的提交对象:
提交对象及其父对象形成的链条:
三、Git的分支管理机制(依赖于指针的变化)
1、分支的创建:创建一个指向HEAD当前指向的分支的当前版本的指针
说明:此时HEAD指向master分支的f30ab版本,那么新创建的testing分支的指针也会指向master分支的f30ab版本,实际上是创建的分支的指针会指向HEAD指针指向的分支所在的版本
2、分支的切换:仅仅是改变HEAD指针的指向
说明:切换分支时,仅仅是切换一下HEAD指针的指向,从原分支指向想切换的分支
3、版本的提交
说明:若此时在testing分支上提交了版本,则只会使该分支的指针向后移动,不会影响其他分支,如上图所示,其他分支的指针指向并没有发生变化
4、冲突的产生
说明:在testing分支修改后,再将HEAD切换至master,然后在master上修改相同的文件,然后再master分支上提交,就会形成下面的局面:这时就有可能产生冲突,这合并版本的时候就需要解决冲突
5、和SVN的比较
SVN在创建分支的时候是将所有文件复制一份,而git仅仅是创建一个指向当前版本的指针,因此效率很高;Git中分支之间的切换仅仅是HEAD指针的变化,效率也很高;
综上:Git的操作很依赖于HEAD指针的变化。
原文:https://blog.csdn.net/rubulai/article/details/84563106
Git基本原理-hash算法的更多相关文章
- OpenStack_Swift源代码分析——Ring基本原理及一致性Hash算法
1.Ring的基本概念 Ring是swfit中最重要的组件.用于记录存储对象与物理位置之间的映射关系,当用户须要对Account.Container.Object操作时,就须要查询相应的Ring文件( ...
- hash算法原理及应用漫谈【加图版】
原文:https://blog.csdn.net/Tencent_TEG/article/details/103021226 提到hash,相信大多数同学都不会陌生,之前很火现在也依旧很火的技术区块链 ...
- 一致性 hash 算法( consistent hashing )a
一致性 hash 算法( consistent hashing ) 张亮 consistent hashing 算法早在 1997 年就在论文 Consistent hashing and rando ...
- 暴雪HASH算法(转)
暴雪公司有个经典的字符串的hash公式 先提一个简单的问题,假如有一个庞大的字符串数组,然后给你一个单独的字符串,让你从这个数组中查找是否有这个字符串并找到它,你会怎么做? 有一个方法最简单,老老实实 ...
- 一致性 hash 算法
consistent hashing 算法早在 1997 年就在论文 Consistent hashing and random trees 中被提出,目前在 cache 系统中应用越来越广泛: 1 ...
- 一致性 hash 算法( consistent hashing )
consistent hashing 算法早在 1997 年就在论文 Consistent hashing and random trees 中被提出,目前在cache 系统中应用越来越广泛: 1 基 ...
- hash算法
作者:July.wuliming.pkuoliver 说明:本文分为三部分内容, 第一部分为一道百度面试题Top K算法的详解:第二部分为关于Hash表算法的详细阐述:第三部分为打造一个最快的Hash ...
- 【转】一致性hash算法(consistent hashing)
consistent hashing 算法早在 1997 年就在论文 Consistent hashing and random trees 中被提出,目前在 cache 系统中应用越来越广泛: 1 ...
- 一致性hash算法 - consistent hashing
consistent hashing 算法早在 1997 年就在论文 Consistent hashing and random trees 中被提出,目前在 cache 系统中应用越来越广泛: 1 ...
随机推荐
- pandas对Excel文件的读写操作
1.将Excel数据读为dataframe 1.1 直接读取 df = pd.read_excel('data.xlsx') 1.2 根据sheet索引 xls = pd.ExcelFile('dat ...
- AntZipUtils【基于Ant的Zip压缩解压缩工具类】
版权声明:本文为HaiyuKing原创文章,转载请注明出处! 前言 Android 压缩解压zip文件一般分为两种方式: 基于JDK的Zip压缩工具类 该版本存在问题:压缩时如果目录或文件名含有中文, ...
- springboot~ObjectMapper~dto到entity的自动赋值
实体与Dto自动赋值 在开发的过程中,实体之间相互赋值是很正常的事,但是我们一般的方法都通过set和get方法来进行的,如果要赋值的字段少那还行,但是需要赋值的字段超过10个,那就是个灾难,你会看到整 ...
- java~springboot~gradle里的docker集成
在springboot里,我们的task任务可以添加docker构建的功能,在gradle集成环境里,直接可以实现编译,测试,打包镜像的流水线作业,很是方便! 下面分享给大家,在gradle里添加do ...
- 前端CSS学习-Background背景相关
在CSS中 背景属性用于定义HTML元素的背景. background主要设置一下五个属性: background-color // 设置元素的背景颜色. background-image // 把 ...
- Springboot 系列(十一)使用 Mybatis(自动生成插件) 访问数据库
1. Springboot mybatis 介绍 MyBatis 是一款优秀的持久层框架,它支持定制化 SQL.存储过程以及高级映射.MyBatis 避免了几乎所有的 JDBC 代码和手动设置参数获取 ...
- base64字符串转文件,以及ngImgCrop裁剪图片并上传保存到服务器示例
base64字符串是包含文件格式的文件字符串,例如:data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAAMgAAADICAYAAACtWK6eAAAgAElE ...
- vue-router 页面布局
在单页面应用程序(SPA)中,有些页面的布局结构是上下两块是固定,中间内容是变化的.这时在入口处固定上下部分就可以很好的解决这一问题.有少部分页面没有上下部分或不需要(如:用户注册.登陆页面),针对这 ...
- Git日常须知
基本操作: git init 初始化环境 git add . 管理文件 git status 查看状态 git diff 文件名 查看修改内容 git commit -m '' 提交文件 git lo ...
- wordpress 角色权限
自带多媒体库上传权限:edit_other_pages