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
最后编辑于
©著作权归作者所有,转载或内容合作请联系作者
  • 序言:七十年代末,一起剥皮案震惊了整个滨河市,随后出现的几起案子,更是在滨河造成了极大的恐慌,老刑警刘岩,带你破解...
    沈念sama阅读 216,142评论 6 498
  • 序言:滨河连续发生了三起死亡事件,死亡现场离奇诡异,居然都是意外死亡,警方通过查阅死者的电脑和手机,发现死者居然都...
    沈念sama阅读 92,298评论 3 392
  • 文/潘晓璐 我一进店门,熙熙楼的掌柜王于贵愁眉苦脸地迎上来,“玉大人,你说我怎么就摊上这事。” “怎么了?”我有些...
    开封第一讲书人阅读 162,068评论 0 351
  • 文/不坏的土叔 我叫张陵,是天一观的道长。 经常有香客问我,道长,这世上最难降的妖魔是什么? 我笑而不...
    开封第一讲书人阅读 58,081评论 1 291
  • 正文 为了忘掉前任,我火速办了婚礼,结果婚礼上,老公的妹妹穿的比我还像新娘。我一直安慰自己,他们只是感情好,可当我...
    茶点故事阅读 67,099评论 6 388
  • 文/花漫 我一把揭开白布。 她就那样静静地躺着,像睡着了一般。 火红的嫁衣衬着肌肤如雪。 梳的纹丝不乱的头发上,一...
    开封第一讲书人阅读 51,071评论 1 295
  • 那天,我揣着相机与录音,去河边找鬼。 笑死,一个胖子当着我的面吹牛,可吹牛的内容都是我干的。 我是一名探鬼主播,决...
    沈念sama阅读 39,990评论 3 417
  • 文/苍兰香墨 我猛地睁开眼,长吁一口气:“原来是场噩梦啊……” “哼!你这毒妇竟也来了?” 一声冷哼从身侧响起,我...
    开封第一讲书人阅读 38,832评论 0 273
  • 序言:老挝万荣一对情侣失踪,失踪者是张志新(化名)和其女友刘颖,没想到半个月后,有当地人在树林里发现了一具尸体,经...
    沈念sama阅读 45,274评论 1 310
  • 正文 独居荒郊野岭守林人离奇死亡,尸身上长有42处带血的脓包…… 初始之章·张勋 以下内容为张勋视角 年9月15日...
    茶点故事阅读 37,488评论 2 331
  • 正文 我和宋清朗相恋三年,在试婚纱的时候发现自己被绿了。 大学时的朋友给我发了我未婚夫和他白月光在一起吃饭的照片。...
    茶点故事阅读 39,649评论 1 347
  • 序言:一个原本活蹦乱跳的男人离奇死亡,死状恐怖,灵堂内的尸体忽然破棺而出,到底是诈尸还是另有隐情,我是刑警宁泽,带...
    沈念sama阅读 35,378评论 5 343
  • 正文 年R本政府宣布,位于F岛的核电站,受9级特大地震影响,放射性物质发生泄漏。R本人自食恶果不足惜,却给世界环境...
    茶点故事阅读 40,979评论 3 325
  • 文/蒙蒙 一、第九天 我趴在偏房一处隐蔽的房顶上张望。 院中可真热闹,春花似锦、人声如沸。这庄子的主人今日做“春日...
    开封第一讲书人阅读 31,625评论 0 21
  • 文/苍兰香墨 我抬头看了看天上的太阳。三九已至,却和暖如春,着一层夹袄步出监牢的瞬间,已是汗流浃背。 一阵脚步声响...
    开封第一讲书人阅读 32,796评论 1 268
  • 我被黑心中介骗来泰国打工, 没想到刚下飞机就差点儿被人妖公主榨干…… 1. 我叫王不留,地道东北人。 一个月前我还...
    沈念sama阅读 47,643评论 2 368
  • 正文 我出身青楼,却偏偏与公主长得像,于是被迫代替她去往敌国和亲。 传闻我的和亲对象是个残疾皇子,可洞房花烛夜当晚...
    茶点故事阅读 44,545评论 2 352

推荐阅读更多精彩内容

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