Git 分布式版本控制系统

网友投稿 552 2022-05-30

目录

文章目录

目录

Git 分布式版本控制系统

Git 的基本概念

Git 的仓库结构

Git 的核心对象

Git 的数据结构

Git Flow

参考文档

Git 分布式版本控制系统

Git 是一个免费的、开源的分布式版本控制系统(Version Control System),本质是一个内容寻址文件系统(Content addressable filesystem)。即:Git 的核心是一个简单的键值对数据库(Simple key-value data store)。

你可以向 Git 插入任意类型的内容,它会返回一个键值(Hash,SHA-1 散列),通过该键值可以在任意时刻再次检索该内容,而这些数据全部是存储在 .git/objects 目录内。

Git 的基本概念

Working Area:本地工作区,对应的文件状态是 Modified(已修改)但还没保存到数据库中。

Index/Stage:本地暂存区,对应的文件状态是 Staged,Git 已经对该文件做了标记,下次提交就知道要包含它了。

Local Repository:本地仓库,存放本地历史版本信息。对应的文件状态是 Committed,文件已经安全的保存在本地数据库中。

Remote Repository:远程仓库。

HEAD:当前版本指针,上一个版本是 HEAD^,以此类推。

Git 的仓库结构

一个完整的 Git 仓库也就是 .git 目录,在这个 Local Repo 中存储了 Git 所有的模型对象。

Git 分布式版本控制系统

Git 的核心对象

Git 主要有四个对象,分别是 Blob、Tree、Commit、Tag 他们都用 SHA-1 Key 进行命名。

Key:是一个由 40 个十六进制字符组成的字符串。前两个字符用于命名子目录,余下的 38 个字符则用作文件名,这样处理是因为检索优化策略,提高文件系统效率。

Value:

Commit:Actual git commits(提交)= Tree + Blob 的 Snapshot(被追踪的最顶层的 Tree)。

Tree:Directoy(目录树),就是一个文件夹。

Blob:file content(文件内容),就是单个的文件。

Tag:是一个 “固化的分支”,一旦打上 tag 之后,这个 tag 代表的内容将永远不可变,因为 tag 只会关联当时版本库中最后一个 commit 对象。

注:Branch 与 Tag 不同,Branch 会随着不断的提交,内容会不断的改变,因为分支指向的最后一个 Commit 不断改变。所以一般应用或者软件版本的发布一般用 Tag。

Git 的数据结构

Git 记录了每个 Snapshot 的 Parent,也就是当前这个目录的上一个版本。那么 Snapshot 迭代更新的过程就可以表示为一个有向无环图。

每个快照都对应了一次 Commit,这就是 Git 的数据模型:

class commit { array parents String author String message Tree snapshot }

1

2

3

4

5

6

Git Flow

最简单的 Git Flow 主要有三步:

在工作区修改文件。

将文件的快照放入暂存区。

找到暂存区的文件,将快照永久性存储到 Local Repo。

详细的说,Git Flow 的项目存在两个长期分支。

主分支(Master branch):存放对外发布的版本,任何时候在这个分支拿到的,都是稳定的分布版;

开发分支(Develop branch):用于日常开发,存放最新的开发版。

其次,项目存在三种短期分支,一旦完成开发,它们就会被合并进 Develop 或 Master branch,然后被删除:

功能分支(Feature branch)

补丁分支(Hotfix branch)

预发分支(Release branch)

Git Flow 的优点是清晰可控,缺点是相对复杂,需要同时维护两个长期分支。这个模式是面向 “版本发布” 的,并不适用于 “持续发布(代码一有变动,就部署一次)” 的场景。

参考文档

https://mp.weixin.qq.com/s/l5JU9e6_HrS_-ixiBIrqsA

Git 分布式

版权声明:本文内容由网络用户投稿,版权归原作者所有,本站不拥有其著作权,亦不承担相应法律责任。如果您发现本站中有涉嫌抄袭或描述失实的内容,请联系我们jiasou666@gmail.com 处理,核实后本网站将在24小时内删除侵权内容。

上一篇:如何基于 Swagger 使用 OpenAPI Generator生成 JMeter 脚本?
下一篇:Python 异步 ASGI 服务器及框架
相关文章