乾貨!如何正確使用Git Flow
我們已經從SVN 切換到Git很多年了,現在幾乎所有的專案都在使用Github管理, 本篇文章講一下為什麼使用Git, 以及如何在團隊中正確使用。
Git的優點
Git的優點很多,但是這裡只列出我認為非常突出的幾點。
- 由於是分散式,所有本地庫包含了遠端庫的所有內容。
- 優秀的分支模型,打分支以及合併分支,機器方便。
- 快速,在這個時間就是金錢的時代,Git由於程式碼都在本地,打分支和合並分支機器快速,使用個SVN的能深刻體會到這種優勢。
感興趣的,可以去看一下Git本身的設計,內在的架構體現了很多的優勢,不愧是出資天才程式設計師Linus (Linux之父) 之手
版本管理的挑戰
雖然有這麼優秀的版本管理工具,但是我們面對版本管理的時候,依然有非常大得挑戰,我們都知道大家工作在同一個倉庫上,那麼彼此的程式碼協作必然帶來很多問題和挑戰,如下:
- 如何開始一個Feature的開發,而不影響別的Feature?
- 由於很容易建立新分支,分支多瞭如何管理,時間久了,如何知道每個分支是幹什麼的?
- 哪些分支已經合併回了主幹?
- 如何進行Release的管理?開始一個Release的時候如何凍結Feature, 如何在Prepare Release的時候,開發人員可以繼續開發新的功能?
- 線上程式碼出Bug了,如何快速修復?而且修復的程式碼要包含到開發人員的分支以及下一個Release?
大部分開發人員現在使用Git就只是用三個甚至兩個分支,一個是Master, 一個是Develop, 還有一個是基於Develop打得各種分支。這個在小專案規模的時候還勉強可以支撐,因為很多人做專案就只有一個Release, 但是人員一多,而且專案週期一長就會出現各種問題。
Git Flow
就像程式碼需要程式碼規範一樣,程式碼管理同樣需要一個清晰的流程和規範
Vincent Driessen 同學為了解決這個問題提出了 A Successful Git Branching Model
下面是Git Flow的流程圖
上面的圖你理解不了? 沒關係,這不是你的錯,我覺得這張圖本身有點問題,這張圖應該左轉90度,大家應該就很用以理解了。
Git Flow常用的分支
- Production 分支
也就是我們經常使用的Master分支,這個分支最近釋出到生產環境的程式碼,最近釋出的Release, 這個分支只能從其他分支合併,不能在這個分支直接修改
- Develop 分支
這個分支是我們是我們的主開發分支,包含所有要釋出到下一個Release的程式碼,這個主要合併與其他分支,比如Feature分支
- Feature 分支
這個分支主要是用來開發一個新的功能,一旦開發完成,我們合併回Develop分支進入下一個Release
- Release分支
當你需要一個釋出一個新Release的時候,我們基於Develop分支建立一個Release分支,完成Release後,我們合併到Master和Develop分支
- Hotfix分支
當我們在Production發現新的Bug時候,我們需要建立一個Hotfix, 完成Hotfix後,我們合併回Master和Develop分支,所以Hotfix的改動會進入下一個Release
Git Flow如何工作
初始分支
所有在Master分支上的Commit應該Tag
Feature 分支
分支名 feature/*
Feature分支做完後,必須合併回Develop分支, 合併完分支後一般會刪點這個Feature分支,但是我們也可以保留
Release分支
分支名 release/*
Release分支基於Develop分支建立,打完Release分之後,我們可以在這個Release分支上測試,修改Bug等。同時,其它開發人員可以基於開發新的Feature (記住:一旦打了Release分支之後不要從Develop分支上合併新的改動到Release分支)
釋出Release分支時,合併Release到Master和Develop, 同時在Master分支上打個Tag記住Release版本號,然後可以刪除Release分支了。
維護分支 Hotfix
分支名 hotfix/*
hotfix分支基於Master分支建立,開發完後需要合併回Master和Develop分支,同時在Master上打一個tag
Git Flow程式碼示例
a. 建立develop分支
git branch develop git push -u origin develop
b. 開始新Feature開發
git checkout -b some-feature develop # Optionally, push branch to origin: git push -u origin some-feature # 做一些改動 git status git add some-file git commit
c. 完成Feature
git pull origin develop git checkout develop git merge --no-ff some-feature git push origin develop git branch -d some-feature # If you pushed branch to origin: git push origin --delete some-feature
d. 開始Relase
git checkout -b release-0.1.0 develop # Optional: Bump version number, commit # Prepare release, commit
e. 完成Release
git checkout master git merge --no-ff release-0.1.0 git push git checkout develop git merge --no-ff release-0.1.0 git push git branch -d release-0.1.0 # If you pushed branch to origin: git push origin --delete release-0.1.0 git tag -a v0.1.0 master git push --tags
f. 開始Hotfix
git checkout -b hotfix-0.1.1 master
g. 完成Hotfix
git checkout master git merge --no-ff hotfix-0.1.1 git push git checkout develop git merge --no-ff hotfix-0.1.1 git push git branch -d hotfix-0.1.1 git tag -a v0.1.1 master git push --tags
Git flow工具
實際上,當你理解了上面的流程後,你完全不用使用工具,但是實際上我們大部分人很多命令就是記不住呀,流程就是記不住呀,腫麼辦呢?
總有聰明的人創造好的工具給大家用, 那就是Git flow script.
安裝
- OS X
brew install git-flow
- Linux
apt-get install git-flow
- Windows
wget -q -O – –no-check-certificate https://github.com/nvie/gitflow/raw/develop/contrib/gitflow-installer.sh | bash
使用
- 初始化: git flow init
- 開始新Feature: git flow feature start MYFEATURE
- Publish一個Feature(也就是push到遠端): git flow feature publish MYFEATURE
- 獲取Publish的Feature: git flow feature pull origin MYFEATURE
- 完成一個Feature: git flow feature finish MYFEATURE
- 開始一個Release: git flow release start RELEASE [BASE]
- Publish一個Release: git flow release publish RELEASE
- 釋出Release: git flow release finish RELEASE
別忘了git push –tags - 開始一個Hotfix: git flow hotfix start VERSION [BASENAME]
- 釋出一個Hotfix: git flow hotfix finish VERSION
Git Flow GUI
上面講了這麼多,我知道還有人記不住,那麼又有人做出了GUI 工具,你只需要點選下一步就行,工具幫你幹這些事!!!
SourceTree
當你用Git-flow初始化後,基本上你只需要點選git flow選單選擇start feature, release或者hotfix, 做完後再次選擇git flow選單,點選Done Action. 我勒個去,我實在想不到還有比這更簡單的了。
目前SourceTree支援Mac, Windows, Linux.
這麼好的工具請問多少錢呢? 免費!!!!
Git flow for visual studio
廣大VS的福音
GitFlow for Visual Studio
相關文章
- 乾貨 | 學習Python的正確姿勢Python
- [Tool] Git 使用 與 Git FlowGit
- Git Flow使用規範Git
- 乾貨!這才是學習Python的正確開啟方式!Python
- 如何正確使用 Slim 框架框架
- 乾貨!企業正確選擇CRM系統的8種方法。
- 如何正確使用async/await?AI
- 海關資料如何正確使用
- Git-flow 工作流使用Git
- Git Flow 使用經驗總結Git
- GIT使用rebase和merge的正確姿勢Git
- Git Dev FlowGitdev
- 如何正確安全使用伺服器?伺服器
- 如何正確使用Node.js事件Node.js事件
- 如何正確使用代理伺服器伺服器
- 如何正確使用開源專案?
- 如何理解並正確使用 MySQL 索引MySql索引
- GitLab、Git Flow 工作流使用Gitlab
- 正確使用Github 的方法 + Git 和 GitHub 教程和技巧Github
- GIT版本管理:Git Flow模型Git模型
- 如何在伺服器上搭建Git版本倉庫(乾貨)伺服器Git
- git commit 的正確姿勢GitMIT
- 開啟Git的正確姿勢Git
- 乾貨!!!測試如何確定是前端bug還是後端bug前端後端
- 如何正確的使用代理ip資源
- 資料混亂如何正確使用CRM
- Retrofit中如何正確的使用https?HTTP
- Android-如何正確地使用HandlerAndroid
- 這是一篇“乾貨”,老司機教你VR體驗的正確姿勢VR
- 在mac 中安裝跟使用git flowMacGit
- 如何正確部署 QUICUI
- git 乾貨系列:(六)公司內部搭建 git 伺服器Git伺服器
- 圖解MySQL索引(三)—如何正確使用索引?圖解MySql索引
- 如何正確規範使用論文腳註
- 加鹽密碼雜湊:如何正確使用密碼
- 從Git向Git-Flow出發Git
- 正確高效使用 GoogleGo
- 正確使用rman crosscheckROS