1. 程式人生 > 其它 >大型開發專案中 git 工作流的最佳實踐

大型開發專案中 git 工作流的最佳實踐

Gitflow Workflow 是一個 Git 工作流,有助於持續軟體開發和實施 DevOps 實踐。 它由文森特·德里森 (Vincent Driessen) 在 nvie 首次出版並廣受歡迎。 Gitflow 工作流定義了圍繞專案釋出設計的嚴格分支模型。 這為管理大型專案提供了一個強大的框架。

Gitflow 非常適合具有預定釋出週期的專案以及持續交付的 DevOps 最佳實踐。 除了功能分支工作流所需的內容之外,此工作流不會新增任何新概念或命令。 相反,它為不同的分支分配非常具體的角色,並定義它們應該如何以及何時互動。 除了功能(feature)分支之外,它還使用單獨的分支來準備、維護和記錄釋出。 當然,您還可以利用 Feature Branch Workflow 的所有優勢:拉取請求、獨立實驗和更高效的協作。

Getting Started

Gitflow 實際上只是 Git 工作流的一個抽象概念。 這意味著它決定了要設定什麼樣的分支以及如何將它們合併在一起。 我們將觸及以下分支的目的。 git-flow 工具集是一個具有安裝過程的實際命令列工具。 git-flow 的安裝過程很簡單。 git-flow 軟體包可在多個作業系統上使用。 在 OSX 系統上,您可以執行 brew install git-flow。 在 Windows 上,您需要下載並安裝 git-flow。 安裝 git-flow 後,您可以通過執行 git flow init 在您的專案中使用它。 Git-flow 是 Git 的包裝器。 git flow init 命令是預設 git init 命令的擴充套件,除了為您建立分支外,不會更改儲存庫中的任何內容。

How it works

Develop and Main Branches

此工作流使用兩個分支來記錄專案的歷史記錄,而不是單個 main 分支。 Main 儲存官方釋出歷史,開發分支作為功能的整合分支。 用版本號標記主分支中的所有提交也很方便。

第一步是用一個 develop 分支補充預設的主分支。 一種簡單的方法是讓開發人員在本地建立一個空的 develop 分支並將其推送到伺服器:

git branch develop
git push -u origin develop

該分支將包含專案的完整歷史記錄,而 main 將包含一個刪節版本。 其他開發人員現在應該克隆中央儲存庫併為 develop branch 建立一個跟蹤分支。

Feature Branches

每個新功能都應該駐留在自己的分支中,可以將其推送到中央儲存庫進行備份/協作。 但是,feature 分支不是從 main 分支出來,而是使用 develop 作為它們的父分支。 當一個功能完成時,它會被合併回 develop branch 。 功能不應該直接與 main branch 互動。

請注意, feature 分支與 develop 分支相結合,就所有意圖和目的而言,都是功能分支工作流。 但是,Gitflow 工作流並不止於此。

feature 分支通常基於最新的開發分支建立。

Creating a feature branch

git checkout develop
git checkout -b feature_branch

Finishing a feature branch

當您完成該功能的開發工作後,下一步是將 feature_branch 合併到 develop 中。

git checkout develop
git merge feature_branch

Release Branches

一旦 develop 獲得了足夠的釋出功能(或預定的釋出日期即將到來),您就可以從 develop 中分出一個 release 分支。建立此分支將啟動下一個釋出週期,因此在此之後不能新增任何新功能——只有錯誤修復、文件生成和其他面向釋出的任務應該在此分支中進行。

一旦準備好釋出, release 分支就會合併到 main 分支並標記一個版本號。此外,它應該合併回 develop branch,自發布開始以來,後者可能已經取得了進展。

使用一個專門的分支來準備釋出可以讓一個團隊完善當前版本,而另一個團隊繼續為下一個版本開發功能。它還建立了明確定義的開發階段(例如,很容易說“本週我們正在為 4.0 版做準備”,並在儲存庫的結構中實際看到它)。

製作 release 分支是另一個簡單的分支操作。與功能分支一樣,release 分支基於 develop 分支。可以使用以下方法建立新的釋出分支。

git checkout develop
git checkout -b release/0.1.0

一旦釋出準備好釋出,它將合併到 main 和 develop,然後Release 分支將被刪除。 合併回 develop 很重要,因為關鍵更新可能已新增到 Release 分支,並且需要新功能可以訪問它們。如果您的組織強調程式碼審查,這將是拉取請求的理想場所。

要完成釋出分支,請使用以下方法:

git checkout main
git merge release/0.1.0

Hotfix Branches

Maintenance 或“hotfix”分支用於快速修補生產版本。 Hotfix 分支很像 release 分支和 feature 分支,只是它們基於 main 而不是 develop。 這是唯一應該直接從 main 分叉出來的分支。 修復完成後,應將其合併到 main 和 develop(或當前 release 分支)中,並且 main 應使用更新的版本號進行標記。

擁有專門的錯誤修復開發線,您的團隊可以在不中斷工作流程的其餘部分或等待下一個釋出週期的情況下解決問題。 您可以將 Maintenance 分支視為直接與 main 一起工作的臨時 release 分支。 可以使用以下方法建立修補程式分支:

git checkout main
git checkout -b hotfix_branch

類似於完成釋出分支,修補程式分支合併到主分支和開發分支。

git checkout main
git merge hotfix_branch
git checkout develop
git merge hotfix_branch
git branch -D hotfix_branch

總結

  • develop 分支是從 main 分支建立的
  • 從 develop 建立一個 Release 分支
  • feature 分支是從 develop 建立的
  • 當一個功能完成時,它會被合併到 develop 分支中
  • release 分支完成後,它會合併到 develop 和 main
  • 如果在 main 中檢測到問題,則從 main 建立一個 hotfix 程式分支
  • 修補程式完成後,它將合併到 develop 和 main 分支

更多Jerry的原創文章,盡在:"汪子熙":