ctrl+c有时候会失效(ctrl c失灵)
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 主要有四个对象,分别是 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
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小时内删除侵权内容。