rdc最佳實踐之開發模式——git flow
引子
今天新建項目的時候,發現rdc
除原有的分支模式
以外還增加了master分支開發模式
和git flow模式
,這是一件非常令人欣喜的事情——畢竟git flow
是一個流傳已久的,大家都普遍接受的開發模式。
於是我就把應用刪掉了,改用git flow
模式,目前體驗很完美。
鑒於很多人可能還不太了解git flow
,本文就對此分享一些微小的經驗。
前言
你會用git嗎?
我相信在座的大多數人都會自信的回答:“會”。
而實際上,大家可能從來沒有考慮過自己的用法是否真的科學,真的健壯,尤其是項目越來越大,人數越來越多,周期越來越長的時候。
其中,典型的有以下幾個問題:
- 當我開發某個功能到一半的時候,PM突然給我安排了一個新的緊急任務,我該怎麼開始這個任務,而不影響現在的?
- 當我代碼寫好了的時候,如何發布?
- 當我發布後,代碼出問題了,如何快速修複?
- 以上的情況,還要求修複後,還要包含之後開發的所有代碼?
大部分開發人員使用git的時候,基本隻使用兩個甚至一個分支,所以下麵的這些理念,顯然是打開了一扇新世界的大門了。
方案
顯然,不光代碼有代碼規範,代碼的管理和協同同樣需要一個清晰的流程和規範,由此,行業內的通用解決方案是Git Flow
。
怎麼樣,眼花繚亂吧,不過我可以給你個建議:把頭左轉90度,別著急罵....這是office picture
,並非我畫的。
在上麵這幅圖上,最上麵的一行,代表分支,它們分別是
|名稱|解釋
|-|-
|master|這個分支最近發布到生產環境的代碼,最近發布的Release, 這個分支隻能從其他分支合並,不能在這個分支直接修改
|Develop|這個分支是我們是我們的主開發分支,包含所有要發布到下一個Release的代碼,這個主要合並與其他分支,比如Feature分支
|Feature|這個分支主要是用來開發一個新的功能,一旦開發完成,我們合並回Develop分支進入下一個Release
|Release|當你需要一個發布一個新Release的時候,我們基於Develop分支創建一個Release分支,完成Release後,我們合並到Master和Develop分支
|Hotfix|當我們在Production發現新的Bug時候,我們需要創建一個Hotfix, 完成Hotfix後,我們合並回Master和Develop分支,所以Hotfix的改動會進入下一個Release.
實現細則
master分支
在master分枝上工作,我們需要遵循一個基本原則,所有在master
分支上的commit
應該tag
.
feature分支
feature
分支做完後,必須合並回develop
分支, 合並完分支後一般會刪點這個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
開發完成
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
release分支
分支名 release/*release
分支基於develop
分支創建,打完release
分支後,我們可以在這個release
分支上測試,修改bug
等。同時,其它開發人員可以基於開發新的feature
,一旦打了release
分支之後不要從develop分支上合並新的改動到Release分支
發布release
分支時,合並release
到master
和develop
, 同時在master
分支上打個tag
記住release
版本號,然後可以刪除release
分支了(當然,你可以選擇不刪除)。
開始release
git checkout -b release-0.1.0 develop
# Optional: Bump version number, commit
# Prepare release, commit
完成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
hotfix
分支名 hotfix/*hotfix
分支基於master
分支創建,開發完後需要合並回master
和develop
分支,同時在master
上打一個tag
開始hotfix
git checkout -b hotfix-0.1.1 master
完成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
工具
如果你能堅持看到這裏,我真的為你感到欣喜,這說明你是用心學習的,並且是不畏艱險的,畢竟上麵那麼長的一大串的代碼,可能已經使你感到畏懼。
而顯然的是,作為通用的一個解決方案,不可能這麼繁瑣,那麼,唯一的可能是——有!工!具!
平台 | 命令 |
---|---|
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 |
IDEA | Git Flow Integration |
其中還有一大部分是gui的,比較簡單,本文就不再贅述了。下麵著重介紹下命令行下的使用
- 初始化: 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
仔細觀察,這些命令都是有規矩的,它們大概可以如下圖表示
最後更新:2017-07-21 11:03:11
上一篇:
SRID (空間引用識別號, 坐標係)
下一篇:
《仿人機器人原理與實戰》一3.3 熱平衡模擬器
Android開發技術周報 Issue#17
AKKA文檔(java版)—角色的引用、路徑和地址
PL/SQL連接遠程數據庫
C#返回以數字日期編號為日期函數
Interop type 'Microsoft.Office.Interop.Word.ApplicationClass' cannot be embedded. Use the applicable
訊飛語音
深入剖析Android應用開發--視頻
雲服務器 ECS 建站教程:快速搭建 Moodle 課程管理係統
oss php sdk基於swoole的簡單HTTP服務器實現
《Linux From Scratch》第二部分:準備構建 第五章:構建臨時文件係統- 5.21. Findutils-4.4.2