來自:點融黑幫(微訊號:DianrongMafia),作者:點融·易翰
寫在前面
本文不是一篇Git入門指南,也不是 Git命令列使用技巧的講解,而是談談作者在過往工作中使用的幾種程式碼版本管理工具的一些體會,同時重點講解一下Git的分支模型。
註:本文中涉及到的 片均來源於網際網路
背景
談論到程式碼版本控制,相信大家在專案開發過程中或多或少都有使用過 SVN 和 Git。對程式碼的更新、提交、合併等操作都非常的熟悉,但是許多人對如何在專案中選擇適合的程式碼管理工具以及對應的工作流卻不是很清楚。
最近剛好在團隊內組織了一次以“一個成功的Git分支模型”為主題的分享活動,旨在同大家一起回顧一下過往專案中使用幾種程式碼版本管理的經歷及體會,並以此來討論 Git 分支模型的適用場景,現將 PPT 中主要內容進行梳理,以內容輸出的方式供大家瞭解。
版本管理工具
專案開發過程中大家可能使用比較多的版本管理工具有:VisualSVN、TortoiseSVN、Bazzar、Mercurial、Git、Bitkeeper 等等。
其中 VisualSVN、TortoiseSVN、Bazzar為集中式版本控制系統。Mercurial、Git、Bitkeeper為分散式版本控制系統。
集中式vs分散式版本控制
集中式版本控制的優點在於可以對具體的檔案或目錄進行許可權控制,缺點在於透過與中心伺服器連線執行所有操作,必須聯網。
分散式版本控制的優點具體如下:
1. 分支管理
2. 安全性更高(因為每個客戶機本地都有保留完整的版本庫)
3. 離線工作,操作便捷(不聯網也能照常工作)
4. 可以實現非常靈活的工作流組合(後面有介紹Git工作流)
分散式版本控制的缺點由於分散式的特性,很難對版本庫中具體的檔案或者目錄做精細的許可權控制。
到這裡相信大家已經對版本控制工具有了一個大致的瞭解,下麵讓我們一起來看看本文的重點內容- Git 分支模型。
首先,讓我們先瞭解一下:
Git是什麼?
Git(讀音為/gt/。)是一個開源的分散式版本控制系統,可以有效、高速的處理從很小到非常大的專案版本管理。
其次,讓我們知道:
有哪些Git程式碼託管平臺
國內常見的 Git 程式碼託管平臺有碼雲(Gitee)、碼市(Coding)等,國外常見的程式碼託管平臺有 Github、Bitbucket、Gitlab、VSTS 等。
最後,讓我們一起來看看
有哪些Git工作流
Centralized(集中式工作流)
Feature Branch(功能分支工作流)
Gitflow (GitflowI作流)
Fork (Fork工作流)
集中式工作流
集中式工作流(Centralized)是以中央倉庫作為專案所有修改的單點物體。所有新功能的開發都是基於一個叫 master 分支進行。
舉個例子:
1、小明開始開發新功能;
2、小明開始開發新功能;
3、小明完成新功能開發,並提交到master分支;
4、小紅完成新功能開發,並提交到master分支,此時提示與小明的內容發生衝突,小紅提交不了程式碼,現在很苦惱!
5、小強發現並即使的幫助小紅rebase了本地的master分支獲取了最新程式碼;
$ git pull — rebase origin master
6、在小強的幫助下,小紅也可以提交新功能開發到master分支;
$ git push origin master
在這件事之後小紅和小明的關係越走越遠,跟小強的人 關係越走越近。
功能分支工作流
該工作流中每個使用者都基於 master 分支建立一個新的功能分支,相比於集中式工作流會更加的安全以及產生更低的衝突率。
基於 master 分支
$ git checkout master
$ git fetch origin
$ git reset — hard origin/master
建立新分支
$ git checkout -b new-feature master
舉個例子:
小強和小 在同一個專案組,現在合作開發一個專案,專案的主分支為master。
小紅建一個新分支
$ git checkout -b xh-feature master
中午到了,小紅提交了本地的修改資訊並通知到小強後去吃午飯;
$ git add .
$ git commit -m ‘add commit’
$ git push origin xh-feature
午飯過後,小紅合併了新分支到master並提交至遠端倉庫;
$ git checkout master
$ git merge xh-feature
$ git push origin master
下午小強獲取小紅的程式碼後發現其開發的功能需求不對,通知小紅更新;
小紅重新修改功能需求後,提交修改併發布;
Fork工作流
該工作流不同於其他型別的工作流,它主要是透過在第三方程式碼託管平臺。上進行 Fork一個開源專案到自己的倉庫中。與clone方式不同,clone主要是對標的倉庫資料的一次複製。
Gitflow工作流
Gitflow工作流仍然用中央倉庫作為所有開發者的互動中心。和其它的工作流一樣,開發者在本地工作並 push 分支到要中央倉庫中。
Gitflow 工作流使用2個分支來記錄專案的歷史。master 分支儲存了正式釋出的歷史,而develop分支作為功能的整合分支。這樣也方便 master 分支上的所有提交分配一個版本號。
主要分支:
?master:
主幹分支,可用於產線正式釋出
?hotfix :
維護/熱修複分支,基於master分支上存在的問題快速修複分支
?release:
釋出分支,可用於測試版本釋出
?develop:
開發分支,可用於開發迭代
?feature:
功能分支,可用於個體開發和協作開發
分支模型的工作原理
功能分支
//建立功能分支
$git checkout -b feature/ feature-name develop
//合併到 develop 分支
$ git checkout develop
$ git merge feature/ feature-name
//刪除功能分支
$ git branch -d feature/ feature- name
釋出分支
//建立 release 分支
$ git checkout -b release/ release-name develop
//合併到 master 分支
$ git checkout master
$ git merge release/release-name
//合併到 develop 分支
$ git checkout develop
$ git merge re lease/ re lease-name
//刪除 release 分支
$ git branch -d release/ release- name
熱修複分支
// 建立 hotfix 分支
$ git checkout -b hotfix/hotfix-name master
// 合併到 master 分支
$ git checkout master
$ git merge hotfix/hotfix-name
//合併到 develop 分支
$ git checkout develop
$ git merge hotfix/hotfix-name
// 刪除 hotfix 分支
$ git branch -d hotfix/hotfix-name
git-flow 工具集
git-flow 是一個git擴充套件集,按Vincent Driessen的分支模型提供高層次的庫操作。
基本命令用法:
簡單實體:
// Gitflow 模型初始化
$ git flow init
//新建特性分支
$ git flow feature start feature-name
//釋出特性分支
$ git flow feature publish feature- name
//合併特性分支
$ git flow feature finish feature-name
//新建釋出分支
$ git flow release start re lea se-name
//合併釋出分支
$ git flow release finish v1.0.0 -m “tag message”
//新建熱修複分支
$ git flow hotfix start hotf ix -name
//合併熱修複分支
$ git flow hotfix finish v1.0.1
寫在最後
本篇文章內容資訊量較大,整理過程中難免會有些紕漏,歡迎大家指正。如需要瞭解更多相關內容請詳細檢視參考資料部分的連結地址。
參考資料:
Git SCM :
https://git-scm.com
Git-flow:
Git branching model:
Comparing Workflows:
Git-flow cheat sheet:
http://danielkummer.github.io/git-flow-cheatsheet/index.zh_CN.html
註:本文中涉及到的 片均來源於網際網路
●編號549,輸入編號直達本文
●輸入m獲取文章目錄