初識 Git 工作流程

吳下阿吉發表於2019-02-24

(文中圖片均來源於網路)

Git

image

Git已是程式碼版本管理的標配,其分散式、多分支功能讓人印象深刻。

Git工作流程(Git Workflow)

github_branching.png

當專案需要多人共同開發時,規範工作流程就變得越來越重要。合適的工作流程能讓多人協同開發更加順利和高效。

目前主流的Git工作流程有三種:

三種工作流程各有優缺點,對於不同型別的專案有各自的用武之地。筆者開發Android專案時使用的是Git Flow,對此比較熟悉。其餘兩種工作流程,筆者出於學習的目的,在文中談談自己的理解。

Git Flow

從分支分類開始,有以下幾類:

長期分支、主要分支

  • master(主分支):穩定可釋出、產品線
  • develop(開發分支):處於開發狀態

image

git checkout -b develop master
git push origin develop
複製程式碼

短期分支、支援性分支

  • feature(功能分支)
  • release(釋出分支)
  • hotfix(修復分支)

feature 功能分支

image

git checkout -b feature-main develop
# git commit 1
# git commit 2
# git commit 3
git checkout develop
git merge --no-ff feature-main
git branch -d feature-main
git push origin develop
複製程式碼
--no-ff

image

release 釋出分支

image

git checkout -b release-1.0 develop
# 可能在該階段再分出 fix-* 分支來修復釋出前的問題,會有git commit和 git merge 操作。
複製程式碼

釋出分支已測試完畢,問題已修復,可釋出時,將程式碼同步到master分支中。

git checkout master
git merge --no-ff release-1.0
git tag -a v1.0
git push origin master
git push origin v1.0
複製程式碼

若在釋出分支中有修復問題,那麼這些提交也要同步到develop分支中。

git checkout develop
git merge --no-ff release-1.0
git push origin develop
複製程式碼

刪除釋出分支。

git branch -d release-1.0
複製程式碼

hotfix 修復分支

當線上版本有緊急問題需要修復,develop分支還處於下一個版本的開發狀態,不好從開發分支分出修復分支,選擇從master分出hotfix-*分支來修復該緊急問題。

image

git checkout -b hotfix-1.2.1 master
git commit -a -m "Bumped version number to 1.2.1"
複製程式碼

該緊急問題被修復,並驗收通過時釋出修復版本,同步程式碼到master分支。

git checkout master
git merge --no-ff hotfix-1.2.1
git tag -a v1.2.1
git push origin master
git push origin v1.2.1
複製程式碼

接著將程式碼同步到develop分支。

git checkout develop
git merge --no-ff hotfix-1.2.1
git push origin develop
複製程式碼

刪除修復分支。

git branch -d hotfix-1.2.1
複製程式碼

實際操作中,會將master作為開發分支,因為它幾乎是Git相關工具的預設分支,可以省去大量切換工作。新建諸如releaseproduction分支作為產品分支。

GitHub Flow

image

只有一個長期分支master,很適合持續釋出的專案,如:網站,相比Git Flow 更簡單、易用。

image

git checkout -b bug47833 master
git commit
git checkout master
git merge --no-ff bug47833
git push origin master
複製程式碼

GitLab Flow

只有一個主分支master。該工作流程最大原則是“上游優先”,只有master分支的程式碼提交,才能應用到下游分支中。

在開發需求或修復問題時,可以使用GitHub Flow方式從master分支分出工作分支,開發完成後以合併請求合併到master分支,當驗收通過時,就可以合入到下游分支併發布了。

持續釋出

image

版本釋出

image

結束語

本文主要介紹了3種Git工作流程,其中重點介紹了Git Flow。目前筆者所在的團隊使用的工作流程類似於GitLab Flow,在這裡只是簡單的介紹,而GitHub Flow工作流程未真正實踐過,出現在文中是為了豐富文章內容。

文中的Git工作流程並不是全部,完全可以自己按需擴充套件或全新定義出適合專案的工作流程。

參考資料