Git 和 Git Flow 是什麼?如何應用?
2023年2月5日
💎 加入 E+ 成長計畫 與超過 500+ 位軟體工程師一同在社群中成長,並且獲得更多的軟體工程學習資源
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 分支進行修復。