天天看點

從一個前端項目實踐 Git flow 的流程與參考

Git flow 出自 A successful Git branching model,這裡使用了一個前端項目配合本文稿實施了 git flow 并記錄流程作出示例和參考,對 hotfix 與持續部署略有提及,本意是用作公司内部的技術安利。

所用源碼及文檔本身見于 github jusfr/HelloGitflow

前言

Gitflow 是一種 git 分支管理工具——說是思想也不為過,它使用既定政策區分和管理開發、測試、生産環境的代碼版本,對測試與持續內建友好,與靈活、疊代的思路一緻。

1 準備工作

1.1 建立空白目錄

mkdir HelloGitflow
cd HelloGitflow
           

1.2 開始目前目錄工作,示例建立和儲存一個 index.html

<!DOCTYPE html>

<html lang="en" xmlns="http://www.w3.org/1999/xhtml">
<head>
    <meta charset="utf-8" />
    <title></title>
</head>
<body>
    <div></div>
</body>
</html>
           
git add index.html
git commit -m "init commit"

           

2 Git flow init

git flow init
           

這裡使用了預設配置,一路 next

3 一個完整的開發周期

3.1 任務拆解,示例添加了分支 about 和 navigation

git flow feature start about
git flow feature start navigation
           
任務拆解相當于 story 認領,實際開發中的步驟更加繁冗。

3.2.1 about 分支建立了一個 about.html

git checkout feature/about
# more work to do
git add about.html
git commit -m "add about.html"
           

3.2.2 navigation 分支建立了一個 nav.html

git checkout feature/navigation
# more work to do
git add nav.html
git commit -m "add nav.html"
           

3.3 開始合并分支

3.3.1 合并 about

git flow feature finish about
           

3.3.2 合并 navigation,存在 merge 過程

git flow feature finish navigation
           

3.4 版本釋出

3.4.1 當 feature 積累數量達到可以進行版本釋出時,開始進行 release 釋出

git flow release start v0.1
           

3.4.2 部分内容需要修改,在這裡為各頁面添加了 title

git add index.html about.html nav.html
git commit -m "add title for each page"
           

3.4.3 結束目前 release 分支

# git push 
git flow release finish v0.1
           

4 連續的開發周期

我們開始在遠端分支上工作,可以在結束分支前先将其 push 到遠端分支上避免未在本地保留的情況

git remote add github https://github.com/jusfr/HelloGitflow.git
git push github --all
           

雖然開出來很多分支,但是可以觀察到 master 和合并了兩次,且分别被标記為 v0.1 和 v0.2

不考慮測試等情況,标記 v0.1 和 v0.2 的 master 版本或者 release/v0.1 和 release/v0.2 都是可以部署的版本。

5 線上的 bug 修複

現在已經在 v0.2 基礎上進行 account 和 react 的分支開發,但是發現線上的 v0.2 版本需要立即修複的問題,分支狀态

開啟 hotfix/v0.2.1 來修複這個問題

git flow hotfix start v0.2.1
           

在 hotfix/v0.2.1 的視角來看,它是從最近的 mater 分支checkout 下來的,是以對正在進行的 account 和 react 無影響

以全局視角來看,hotfix/v0.2.1 與 account 和 react 确實沒有交集

現在問題修複,合并 hotfix/v0.2.1

git flow hotfix finish 'v0.2.1'
           

當然仍然可以先 push 到遠端分支,可以看到進行了若幹步操作

  1. 合并 hotfix/v0.2.1 到 master 分支,master 分支被打上 v0.2.1 的 tag
  2. 合并 master 到 develop 分支。

在第2步中,如果 develop 有過變更,比如有過 feature 合并,那麼可能存在沖突需要解決

在此示例中, master 分别被打上了 v0.1, v0.2, v0.2.1 标記,這對基于 master 的持續部署非常友好:可以快速在這些版本中部署與復原,而不用關心存在多少變更與分支等等。