git 基本原理

哈希

哈希是一个系列的加密算法,各个不同的哈希算法虽然加密强度不同,但是有以下几个共同点:

(1)不管输入数据的数据量多大,输入同一个哈希算法,得到的加密结果长度固定;
(2)哈希算法确定,输入数据确定,输出数据能保证不变;
(3)哈希算法确定,输入数据有变化,输出数据一点有变化,而且通常变化很大;
(4)哈希算法不可逆;
MD5、SHA-1、CRC32都属于哈希算法,Git底层采用的是SHA-1算法。
哈希算法可以被用来验证文件。原理如下图:


image.png

Git靠这种机制来从根本上保证数据的完整性。

保存版本的机制

  1. 集中式版本控制工具的文件管理机制
    以文件变更列表的方式存储信息。这列系统将它们保存的信息看作是一组基本文件和每个文件随时间逐步积累的差异。


    image.png
  2. Git 的文件管理机制
    Git把数据看作是小型文件系统的一组快照。每次提交更新时Git都会对当前的全部文件制作一个快照并保存这个快照的索引。为了高效,如果文件没有修改,Git不再重新存储该文件,而是只留一个链接指向之前存储的文件。所以Git的工作方式可以称之为快照流。


    image.png
  3. Git 的文件管理机制细节


    image.png

Git分支管理机制

  1. 分支的创建


    image.png
  2. 分支的切换


    image.png

    切换testiing分支


    image.png

    切换回master分支
    image.png

    master再次提交后


    image.png

Git 工作流

  1. 集中式工作流:像SVN一样,集中式工作流以中央库作为项目所有修改的单点实体。所有修改都提交到Master这个分支上。这种方式与SVN的主要区别就是开发人员有本地库。Git很多特性并没有用到。


    image.png
  2. GitFlow工作流:通过为功能开放、发布准备和维护设立了独立的分支,让发布迭代过程更流畅。严格的分支模型也为大型项目提供了一些非常必要的结构。


    image.png
  3. Forking工作流:是在GitFlow基础上,充分利用了Git和Fork和pull request的功能已达到代码审核的目的。更适合安全可靠得管理大团队的开发者,而且能接收不信任贡献值的提交。(虚拟团队用得较多)

GitFlow工作流详解

  1. 主干分支 master:主要负责管理正在运行的生产环境代码。永远保持与正在运行的生产环境完全一致;
  2. 开发分支 develop:主要负责管理正在开发过程中的代码。一般情况应该是最新的代码;
  3. bug 修理分支 hotfix :主要负责管理生产环境下出现的紧急修复的代码。从主干分支分出,修复完毕并测试上线后,合并回主干分支。合并后,视情况可以删除该分支。
  4. 准生产分支(预发版分支)release:较大的版本上线前,会从开发分支中分出准生产分支,进行最后阶段的集成测试。该版本上线后,会合并到主干分支。生产环境运行一段阶段较稳定后可以视情况删除;
  5. 功能分支 feature:为了不影响较短周期的开发工作,一般把中长期开发模块,从开发分支中独立出来。开发完成后合并到开发分支。

GitFlow工作流举例

image.png
image.png

分支操作

  1. 创建分支dev:git branch dev
  2. 切换到dev分支:git checkout dev
  3. 编辑代码并提交到本地:
    git add [文件名]
    git commit -m "日志信息"
  4. 推送到远程:git push origin dev
  5. 检出远程dev分支:git checkout origin dev
  6. 合并master:
    切换回master:git checkout master
    合并:git merge dev
    (解决冲突)
  7. 合并成功后推送到远程master:git push origin master
最后编辑于
©著作权归作者所有,转载或内容合作请联系作者
平台声明:文章内容(如有图片或视频亦包括在内)由作者上传并发布,文章内容仅代表作者本人观点,简书系信息发布平台,仅提供信息存储服务。

推荐阅读更多精彩内容

  • 1、文件结构 1.1 config文件 该文件主要记录针对该项目的一些配置信息,例如是否以bare[远端仓库...
    _叮叮当当__阅读 645评论 0 0
  • 工作方式:Git 并不保存这些前后变化的差异数据。实际上,Git 更像是把变化的文件作快照后,记录在一个微型的文件...
    WorldPeace_hp阅读 239评论 0 0
  • GIT分布式版本控制系统最佳实践 这篇文章来自于老男孩教育高级架构师班12期的徐亮偉同学。 首先感谢老男孩架构师班...
    meng_philip123阅读 3,476评论 4 36
  • Git Server 在指定 directory 目录下创建 git 库。通常 directory 为 <name...
    michael_jia阅读 792评论 2 0
  • 文 念陳 明媚的阳光透过大大的落地窗照在了咖啡厅的桌上,我故作镇定的喝了一口咖啡顺便瞟了一眼坐在我眼前的那个比阳光...
    念陳阅读 548评论 1 14