Git 和 Git Flow 是什麼?如何應用?

2023年2月5日

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

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 上追蹤我們