Git 和 Git Flow 是什么?如何应用?
2023年2月5日
💎 加入 E+ 成長計畫 如果你喜歡我們的內容,歡迎加入 E+,獲得更多深入的軟體前後端內容
Git 是分散版本控制系统,常被用于软件开发专案的版本控制、合作和备份。面试时常被问到的 Git 相关题目包括:Git 是什么、Git Flow 是什么、以及如何应用。
Git 是什么?
Git 是一个分散式版本控制软件,能够纪录档案的状态变化,Git 版本控制的方法并非纪录版本间的差异,流程如下:
- Version 1:资料夹中新增三份文件,分别为
A
、B
。 - Version 2:新增
C
、D
,则原本的A
、B
会指向 Version 1 的A
、B
。 - Version 3:修改
B
、C
,则A
会指向 Version 1 的A
,D
会指向 Version 2 的D
。
资料结构
Git 有两种资料结构,分别为 物件
以及 索引
,两者差别如下:
物件
物件是一种不可变的(immutable)档案类型,存放于 .git/object/
,物件都是透过档案内容进行 SHA1 杂凑出 Hash 值来当作档案名称,而物件类型可以再分为三种:
- blob 物件:记载档案内容。
- tree 物件:记载特定资料夹下有哪些档案,以及档案对应的 blob 物件档名,也可以包含 tree 物件,功能类似资料夹的概念。
- commit 物件:会记录着某个 tree 物件、parent (上一次的 commit 物件)等资讯。
还有一种并非以 Hash 值当作档案名称的物件:
- tag 物件:在新增 tag 时会出现,并存放于
.git/refs
当中,会固定指向某个 Commit 物件。
索引
位于.git/index
里,为一个二进位档案,它会用来记录哪些档案需要提交到 Repository,此索引档通常保存着 Git 储存库中特定的版本状态,介于 Working space 与 Repository 之间。
Git Flow 是什么?
Git 可以开不同的分支,让程式能够在不同的分支上做开发,而通常会区分成
- master: 处于 production ready 的状态,是可运行的、功能完整、设计良好、以文件化等。
- develop: 下次发布版本的最新状态,最主要从 master 分支出来,自动化测试所根据的代码会从此分支来进行测试。
- feature: 从 develop 分支出来,主要用来开发新的功能,开发完后需合并回 develop 分支。
- release: 当 develop 分支够成熟后,就可以合并回 release 分支,算是上线前最后的测试,测完成后再合并回 develop 分支以及 master 分支。
- hotfix: 从 master 分支出来,当产品上线时发生紧急问题的时候,会开一个 hotfix 分支进行修复。