优雅的源代码管理(二):Git 的工作原理

本文为日常工作使用,仅做简单的解析,不做深入探究。
为什么需要知道 Git 的原理
在后续使用 Git 时,如果你明白 Git 是如何工作的,很多问题你将更容易理解,比如变基、分叉等问题,所以我推荐所有使用 Git 的开发人员了解 Git 的工作原理,只需要理解即可,无需掌握,所以推荐阁下进行浅浅的阅读了解即可,我也不会深入探究原理。
这里我只写我的理解,如果你希望阅读官方的文档,可以参见:https://git-scm.com/book/zh/v2
Git 是如何工作的

Git 大致由这些常用的部分组成:
- Workspace:工作区,这个区域就是我们的当前你正在修改的代码
- Index或叫Stash:暂存区,有点像个小口袋,我们可以把当前修改存进去或取出来
- Repository:本地仓库,整个项目的历史提交信息都在这里
- Remote:远程仓库,大家都往这里 push 推送版本信息,pull 拉取最新的代码
Git 如何管理提交
git内部一切皆对象,commit 对象是 git 仓库的一个快照,包含了整个项目在某一次提交时所有的文件。commit 指向一个 tree 对象,这个 tree 是目录的根路径,然后递归指向下面的 tree 和 blob 对象,blob 则是单个文件的二进制存储。

每次 commit 都保存全部文件?其实不是的,对同一个文件(blob对象)的存储永远只有一份,不同commit中是用对象引用的形式来指向同一文件。
commit 对象中还有一个字段是 parent,父节点,多个 commit 对象就形成了一个链表,一条链起一个名字就是一个分支。
然后再用一个指针指向不同的 commit 对象,就可以回到任意一个提交版本,HEAD 指向的就是最新的节点。
Git 分叉(branch diverged)
正是由于 commit 是一条链,使用指针指向各个节点来表示代码版本,作为技术经理的我,各种场面都见了,连比较罕见的分叉我也见过了,当时场面是这样的:
- 开发者A:哎?我的代码怎么没了?提交记录都没了?
- 开发者B:哎?我删除的代码怎么又回来了?
- 开发者C:我表示正常,我的代码都在,肯定是你们的问题!
- 我:MD 开发分支分叉了!你们咋 push 的?推不上去就别强推啊!以后都用自己的分支吧,开发分支开启保护了禁止 push!
分叉大概是这样
例如两个开发者B和C,分别在同一个分支上,在自己的电脑上进行 commit 提交,然后场面是这样:

开发者 C 先 push 了,这个分支的最新节点指向开发者 C 的 commit:

然后开发者 B 也 push,但肯定会失败,使用的可视化软件可能会提示一些扯淡的解决方案,勾选 force 强制推送,然后成了这样:

这样开发者 C 的提交就莫名消失了,因为分叉了。
商业用途请联系作者获得授权。
版权声明:本文为博主「任霏」原创文章,遵循 CC BY-NC-SA 4.0 版权协议,转载请附上原文出处链接及本声明。
相关推荐
猜你还喜欢这些内容,不妨试试阅读一下评论与留言
以下内容均由网友提交发布,版权与真实性无法查证,请自行辨别。微信订阅号
扫码关注「任霏博客」微信订阅号- 你好,我想问一下如果是分析型的数据库要怎么制作docker镜像呢 是修改V008R003C002B0320版本号吗
- 可以的,我也正在开发分享的程序,可以邮件或群联系我都可以,关于页面里有联系方式:https://www.renfei.net/page/about 。
- 有破解软件的需要可以私下联系您吗?
- 您好,手机APP只是个客户端,用于数据呈现展示,数据均保存在服务器上,只留个APP没有任何用处,无能为力哦。
- 老哥 看你弄了这么多软件好厉害啊。 我有个软件 我买过几个小会员 没用几天 然后商家跑路了,软件服务器关闭了,连不上去 用不了。 你能做成一个打补丁版本可以本地用的么? 方便看下么?https://haodezhe.lanzouw.com/iD0f30h9joza 谢谢老哥!
- 您好,由于版权投诉和我国知识产权法的完善,我已经下架所有破解软件的下载链接了。
- 请问怎么下载呀
- 我保存的License在:https://gitlab.com/renfei/KingbaseES-V8-R3/-/tree/master/License ,开发版是长期有效的,只不过限制连接数,现在官网好像已经下线 V8R3 的下载页面了,其他版本我也不确定是否过期
- 这个版本的license有没有
- 序列号长度不对呀
- 优雅的源代码管理(二):Git 的工作原理
- 优雅的源代码管理(一):版本控制系统 VCS(Version Control System)与软件配置管理 SCM(Software Configuration Management)
- ChatGPT 开发商 OpenAI 买下极品域名 AI.com
- 火爆的 AI 人工智能 ChatGPT 国内注册教程、使用方式和收费标准
- 解决 SpringCloud 中 bootstrap.yml 不识别 @[email protected] 参数
- Cron表达式书写教程搞定Linux、Spring、Quartz的定时任务
- 阿里云香港可用区C发生史诗级故障
- 国产统信UOS服务器操作系统V20提供免费使用授权
- 开源站长推送工具效果评测推荐(百度/必应/谷歌)
- 获取公网IP服务「ip.renfei.net」升级增加地理定位数据字段公示