Git基本原理
哈希
哈希是一个系列的加密算法, 各个不同的哈希算法虽然加密强度不同, 但是有以下
几个共同点:
①不管输入数据的数据量有多大,输入同一个哈希算法,得到的加密结果长度固定。
②哈希算法确定, 输入数据确定, 输出数据能够保证不变
③哈希算法确定, 输入数据有变化, 输出数据一定有变化, 而且通常变化很大
④哈希算法不可逆
Git 底层采用的是 SHA-1 算法
哈希算法可以被用来验证文件。
Git 就是靠这种机制来从根本上保证数据完整性的。
Git 保存版本的机制
集中式版本控制工具的文件管理机制
以文件变更列表的方式存储信息。这类系统将它们保存的信息看作是一组基本
文件和每个文件随时间逐步累积的差异 。
Git 的文件管理机制
Git 把数据看作是小型文件系统的一组快照。 每次提交更新时 Git 都会对当前
的全部文件制作一个快照并保存这个快照的索引。 为了高效, 如果文件没有修改,
Git 不再重新存储该文件, 而是只保留一个链接指向之前存储的文件。 所以 Git 的
工作方式可以称之为快照流。
Git 文件管理机制细节
Git的提交对象
我们add
的每一个文件都会被加密后得到一个哈希值,然后放到树中,树中有提交的每个文件的哈希值,同时这个树也会有一个哈希值,提交后会把这个树的哈希值、提交的数量、提交者、作者等这一些信息加密后又得到一个哈希值,这也就是我们的一个版本信息。
提交对象及其父对象形成的链条
第一次提交后没有父对象,第二次提交后把第一次提交的代码作为父对象,第三次提交把第二次提交的代码作为父对象,Git正是这样实现的版本控制。
Git 分支管理机制
分支的创建
创建分支只需要把指针指向某一部分代码,HEAD
指向主分支,代表当前在主分支操作。
分支的切换
当想在testing
分支上继续操作时,只需要把HEAD指针指向testing
分支即可。
在testing上继续开发,这样testing分支就比主分支多了一部分代码
想要切换回主分支只需要把指针直接指向主分支即可
也可以两边同时进行开发
原文地址:https://www.cnblogs.com/chen88/p/11538371.html
- 关于EF Code First模式不同建模方式对建表产生的影响
- C# 命名空间和程序集
- C# new关键字和对象类型转换(双括号、is操作符、as操作符)
- 防止小程序多次点击跳转解决方案
- 详述 SQL 中的 distinct 和 row_number() over() 的区别及用法
- Web API系列之三 基本功能实现
- 微信小程序的省市选择组件 citySelector分享
- 详述 Java 语言中的 String、StringBuffer 和 StringBuilder 的使用方法及区别
- Class与Style绑定
- 机器学习并不难
- android的RadioGroup讲解
- asp.net MVC 应用程序的生命周期
- 091031 T PowerShell Solution
- Rafy 框架 - 通用查询条件(CommonQueryCriteria)
- JavaScript 教程
- JavaScript 编辑工具
- JavaScript 与HTML
- JavaScript 与Java
- JavaScript 数据结构
- JavaScript 基本数据类型
- JavaScript 特殊数据类型
- JavaScript 运算符
- JavaScript typeof 运算符
- JavaScript 表达式
- JavaScript 类型转换
- JavaScript 基本语法
- JavaScript 注释
- Javascript 基本处理流程
- Javascript 选择结构
- Javascript if 语句
- Javascript if 语句的嵌套
- Javascript switch 语句
- Javascript 循环结构
- Javascript 循环结构实例
- Javascript 跳转语句
- Javascript 控制语句总结
- Javascript 函数介绍
- Javascript 函数的定义
- Javascript 函数调用
- Javascript 几种特殊的函数
- JavaScript 内置函数简介
- Javascript eval() 函数
- Javascript isFinite() 函数
- Javascript isNaN() 函数
- parseInt() 与 parseFloat()
- escape() 与 unescape()
- Javascript 字符串介绍
- Javascript length属性
- javascript 字符串函数
- Javascript 日期对象简介
- Javascript 日期对象用途
- Date 对象属性和方法
- Javascript 数组是什么
- Javascript 创建数组
- Javascript 数组赋值与取值
- Javascript 数组属性和方法
- 小程序bindinput和bindblur赋值延迟问题解决
- 小程序监听屏幕滑动事件
- 使用GithubActions发布Vue网站到GithubPage
- 3.QOpenGLWidget-通过着色器来渲染渐变三角形
- 特斯拉大半夜「见鬼」!空无一人的路上,它却看见「幽灵」秒刹车
- .NET 异步详解
- 他被导师半夜敲门叫醒:你得诺贝尔奖了!还曾为5G频谱拍卖设计方案,担任谷歌IPO咨询顾问
- C#实现——十大排序算法之选择排序
- CSS高级技巧 CSS用户界面样式
- 从零开始针对 .NET 应用的 DevOps 运营实践 - 运行环境搭建
- Sentinel断路器与熔断降级【源码笔记】
- 数据分析、数据挖掘基础:描述统计学基础知识分享!
- 前端开发必会的HTML/CSS硬知识
- 前端开发必会的HTML/CSS硬知识 (二)
- 移动web开发之rem布局