Git 和 Git Flow 是什么?如何应用?

2023年2月5日

💎 加入 E+ 成長計畫 與超過 350+ 位軟體工程師一同在社群中成長,並且獲得更多的軟體工程學習資源

Git 是分散版本控制系统,常被用于软件开发专案的版本控制、合作和备份。面试时常被问到的 Git 相关题目包括:Git 是什么、Git Flow 是什么、以及如何应用。

Git 是什么?

Git 是一个分散式版本控制软件,能够纪录档案的状态变化,Git 版本控制的方法并非纪录版本间的差异,流程如下:

Git 版本控制
Git 版本控制
  1. Version 1:资料夹中新增三份文件,分别为 AB
  2. Version 2:新增 CD ,则原本的 AB 会指向 Version 1 的 AB
  3. Version 3:修改 BC ,则 A 会指向 Version 1 的 AD 会指向 Version 2 的 D

资料结构

Git 有两种资料结构,分别为 物件 以及 索引 ,两者差别如下:

物件

物件是一种不可变的(immutable)档案类型,存放于 .git/object/ ,物件都是透过档案内容进行 SHA1 杂凑出 Hash 值来当作档案名称,而物件类型可以再分为三种:

  • blob 物件:记载档案内容。
  • tree 物件:记载特定资料夹下有哪些档案,以及档案对应的 blob 物件档名,也可以包含 tree 物件,功能类似资料夹的概念。
  • commit 物件:会记录着某个 tree 物件、parent (上一次的 commit 物件)等资讯。
Git object
Git object

还有一种并非以 Hash 值当作档案名称的物件:

  • tag 物件:在新增 tag 时会出现,并存放于 .git/refs 当中,会固定指向某个 Commit 物件。

索引

位于.git/index 里,为一个二进位档案,它会用来记录哪些档案需要提交到 Repository,此索引档通常保存着 Git 储存库中特定的版本状态,介于 Working space 与 Repository 之间。

Git stage
Git stage

Git Flow 是什么?

Git 可以开不同的分支,让程式能够在不同的分支上做开发,而通常会区分成

  • master: 处于 production ready 的状态,是可运行的、功能完整、设计良好、以文件化等。
  • develop: 下次发布版本的最新状态,最主要从 master 分支出来,自动化测试所根据的代码会从此分支来进行测试。
  • feature: 从 develop 分支出来,主要用来开发新的功能,开发完后需合并回 develop 分支。
  • release: 当 develop 分支够成熟后,就可以合并回 release 分支,算是上线前最后的测试,测完成后再合并回 develop 分支以及 master 分支。
  • hotfix: 从 master 分支出来,当产品上线时发生紧急问题的时候,会开一个 hotfix 分支进行修复。
Git flow
Git flow
圖片來源:https://nvie.com/posts/a-successful-git-branching-model/
🧵 如果你想收到最即時的內容更新,可以在 FacebookInstagram 上追蹤我們