Git 分布式版本控制系统
目录
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 主要有四个对象,分别是 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<commit> 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
文章来源: is-cloud.blog.csdn.net,作者:范桂飓,版权归原作者所有,如需转载,请联系作者。
原文链接:is-cloud.blog.csdn.net/article/details/108588674
- 点赞
- 收藏
- 关注作者
评论(0)