Git是一個開源的

分散式版本管理系統

,可以快速、高效地處理各種體量(大的、小的專案都適用)專案的版本管理工作。

Git源於Linus Torvalds為Linux核心開發而開發的一個開源的版本管理軟體。我們可以在

免費獲取Git電子書。

Git作為一個原始碼的管理系統,不可避免涉及多人協作,為了保障多人協作順暢,需要約定一個協作流程規範,廣泛使用的工作流程有:Git flow、GitHub flow和Gitlab flow,本文聚焦Git flow工作流程,先對流程規範做簡單介紹,後結合Git客戶端操作,演練各流程操作。

Vincent Driessen提出的Git Flow可由下圖基本概括:

Git工作流程

Gitflow流程圖

首先,專案存在兩個長期分支,主分支master和開發分支develop,master用於存放對外發布的版本,任何使用在master分支拿到的,都應該為最新的釋出版;develop用於日常開發,存放最新的開發版。同時專案存在三個短期分支,

功能分支

(feature branch)、

補丁分支

(hotfix branch)和預發分支(

release branch

),短期分支屬於臨時性需要,使用完後,應該立即刪除,使得程式碼庫常設分支始終只有master和develop。

主分支master

程式碼庫

應該有且僅有一個主分支,所有提供給使用者使用的正式版本,都在這個分支上釋出。

Git工作流程

master分支

Git主分支的名稱,預設叫master,它是自動建立的,程式碼庫初始化後,預設在主分支開發。

開發分支develop

日常開發我們在develop上完成,程式碼庫初始化後,基於master分支建立develop分支,每完成一個版本的開發,就需要在master分支上對develop分支進行合併操作。

Git工作流程

develop分支

程式碼庫初始化後,基於master分支建立develop分支:

git checkout -b develop master

將develop分支釋出到master分支:

# 切換到master分支

git checkout master

# 對develop分支合併

git merge ——no——ff develop

功能分支

功能分支,是為了開發某種特定功能,從develop分支上分出來的,功能開發完成後,再合併到develop分支。

Git工作流程

feature分支

功能分支的名字,一般採用feature-*的形式命名。基於develop分支建立一個功能分支:

git checkout -b feature-xx develop

對應功能開發完成後,應將該功能分支合併到develop分支,並刪除該功能分支:

# 切換到develop分支

git checkout develop

# 合併功能分支

git merge ——no-ff feature-xx

# 刪除feature分支

git branch -d feature-xx

預釋出分支

預釋出分支,指在正式釋出前(develop合併到master),我們可能需要有一個預釋出的版本用來測試,預釋出分支是從develop分支上分出來的,預釋出版本測試結束後,必須同步合併進develop分支和master分支,它的命名可以採用release-*的形式。

基於develop分支建立一個預釋出分支:

git checkout -b release-1。2 develop

測試沒有問題後,合併到master分支:

# 切換到master分支

git checkout master

# 合併預釋出分支

git merge ——no——ff release-1。2

# 對釋出版本,生成一個標籤

git tag -a v1。2

同步合併到develop分支:

# 切換到develop分支

git checkout develop

# 合併預釋出分支

git merge ——no——ff release-1。2

刪除預釋出分支:

git branch -d release-1。2

補丁分支

補丁分支用於修復釋出後bug。軟體正式釋出後,使用者使用,無法避免無任何問題,發現釋出後bug後,應該建立一個補丁分支,進行bug修復。

補丁分支一般從使用者使用的正式版本對應的master分支節點(tag)檢出,bug修復後,應同步合併到master和develop分支,可以採用hotfix-*形式命名。

Git工作流程

hotfix分支

基於master建立一個hotfix分支:

git checkout -b hotfix-0。2。1 v0。2

bug修復後合併到master分支:

# 切換到master分支

git checkout master

# 合併補丁分支

git merge ——no-ff hotfix-0。2。1

# 打一個tag

git tag -a v0。2。1

同步合併到develop分支:

# 切換到develop分支

git checkout develop

# 合併補丁分支

git merge ——no-ff hotfix-0。2。1

刪除補丁分支:

git branch -d hotfix-0。2。1

以上,我們介紹了gitflow的標準規範,接下來我們結合git客戶端工具實踐專案研發過程中各環節操作流程。

1。 伺服器端(github、gitlab等)建立一個空專案,將原生代碼庫提交:

Git工作流程

# 初始化

git init

# 關聯伺服器端專案

git remote add origin http://xxx ## http、git協議都可以

# 新增所有檔案到git快取區

git add 。

# 提交檔案到本地git庫

git commit -m “提交描述資訊”

# 推送伺服器端

git push -u

origin master

2。 從伺服器端克隆專案,並建立develop分支:

Git工作流程

# 從伺服器端克隆專案

git clone http://xxx ## http、git協議都可以

# 基於master分支檢出develop分支

git checkout -b develop master

# 將develop分支推送伺服器端

git push origin develop

3。 基於develop分支,檢出feature分支:

Git工作流程

# 基於develop分支檢出

feature-guagua

分支

git checkout -b feature-guagua develop

# 開發實現功能,並提交程式碼到本地git庫

git add 。

git commit -m “描述資訊”

# 合併feature分支程式碼到develop分支

git checkout develop

git merge ——no-ff feature-guagua

4。 功能開發完後,提交程式碼到伺服器端,併發布

Git工作流程

原生代碼提交到伺服器端develop分支後,後續操作應該在伺服器端操作,本例基於gitlab

Git工作流程

提交合並請求後,具備稽核許可權的開發者或是管理者,稽核通過後,確認合併。這時候可以在伺服器端基於當前master打tag,進行釋出。