淺析項(xiàng)目團(tuán)隊(duì)中的Git分布式工作流

Git作為目前強(qiáng)有力的軟件團(tuán)隊(duì)合作工具,除去git工具的基礎(chǔ)使用,怎樣在項(xiàng)目團(tuán)隊(duì)中合理地使用強(qiáng)大的分布式版本控制軟件揽涮,以實(shí)現(xiàn)敏捷高效的開(kāi)發(fā)工作抠藕,也是學(xué)習(xí)Git的重要內(nèi)容。本文主要參考atlassian蒋困,在該文章的基礎(chǔ)上盾似,做了一些標(biāo)注與說(shuō)明,并結(jié)合git常用操作雪标,對(duì)Git工作流作一些介紹與分析零院。


關(guān)于Git基本操作,推薦廖雪峰的教程村刨,戳Git基礎(chǔ)教程


分布式工作流

在集中式版本控制系統(tǒng)如SVN告抄、CVN下工作時(shí),有一臺(tái)中央服務(wù)器保存了項(xiàng)目的全部核心代碼庫(kù)烹困,客戶端全部是其的離線拷貝玄妈,所有提交最終都要匯總到中心服務(wù)器乾吻,并且可以影響全部離線拷貝髓梅。


集中式工作流

和集中式版本控制系統(tǒng)相比,分布式版本控制系統(tǒng)Git的安全性要高很多绎签,因?yàn)槊總€(gè)人電腦里都有完整的版本庫(kù)枯饿,這樣,工作的時(shí)候就不需要聯(lián)網(wǎng)了诡必,因?yàn)榘姹径际窃谧约旱碾娔X上奢方。
使用Git為開(kāi)發(fā)工作流提供了一些好處:

  • 它給每個(gè)開(kāi)發(fā)者自己的整個(gè)項(xiàng)目的本地副本。 這個(gè)隔離的環(huán)境使每個(gè)開(kāi)發(fā)人員獨(dú)立于項(xiàng)目的所有其他更改工作爸舒,他們可以添加提交到本地存儲(chǔ)庫(kù)蟋字,完全忘記上游開(kāi)發(fā),直到它們方便扭勉。
  • 它讓你訪問(wèn)Git的魯棒分支和合并模型鹊奖。 與SVN不同,Git分支被設(shè)計(jì)為一種故障安全機(jī)制涂炎,用于集成代碼和在存儲(chǔ)庫(kù)之間共享更改忠聚。

分支管理

Git工作流使用最好遵循標(biāo)準(zhǔn)的使用規(guī)范,下面列出常用的分支:

  1. Master分支
    這個(gè)分支也稱為Production分支唱捣,包含了最近發(fā)布到生產(chǎn)環(huán)境的代碼两蟀,最近發(fā)布的Release, 這個(gè)分支只能從其他分支合并震缭,不能在這個(gè)分支直接修改
  2. Develop 分支
    這個(gè)分支是我們是我們的主開(kāi)發(fā)分支赂毯,包含所有要發(fā)布到下一個(gè)Release的代碼,這個(gè)主要合并與其他分支,比如Feature分支
  3. Feature 分支
    這個(gè)分支主要是用來(lái)開(kāi)發(fā)一個(gè)新的功能党涕,一旦開(kāi)發(fā)完成活烙,我們合并回Develop分支進(jìn)入下一個(gè)Release
  4. Release分支
    當(dāng)你需要一個(gè)發(fā)布一個(gè)新Release的時(shí)候,我們基于Develop分支創(chuàng)建一個(gè)Release分支遣鼓。
  • 這個(gè)分支只應(yīng)該做Bug修復(fù)啸盏、文檔生成和其它面向發(fā)布任務(wù)。一旦對(duì)外發(fā)布的工作都完成了骑祟,發(fā)布分支合并到master分支并分配一個(gè)版本號(hào)打好Tag回懦。
  • 另外,這些從新建發(fā)布分支以來(lái)的做的修改要合并回develop分支次企。
  1. Hotfix分支
    當(dāng)我們?cè)赑roduction發(fā)現(xiàn)新的Bug時(shí)候怯晕,我們需要?jiǎng)?chuàng)建一個(gè)Hotfix分支。這是唯一可以直接從master分支fork出來(lái)的分支缸棵。修復(fù)完成舟茶,修改應(yīng)該馬上合并回master分支和develop分支(當(dāng)前的發(fā)布分支),master分支應(yīng)該用新的版本號(hào)打好Tag堵第。
Git工作流

工作實(shí)踐

在服務(wù)器上建立好遠(yuǎn)程中央倉(cāng)庫(kù)吧凉。

創(chuàng)建Develop分支

第一步為Mater分支建立一個(gè)Develop分支。一個(gè)簡(jiǎn)單的方法是一個(gè)開(kāi)發(fā)人員在本地創(chuàng)建一個(gè)空的Develop分支并將其推送到服務(wù)器:
git branch develop git push -u origin develop


項(xiàng)目組其他開(kāi)發(fā)人員克隆中央倉(cāng)庫(kù)克隆踏志,并切換至Develop分支:
git clone ssh://user@host/path/to/repo.git git checkout -b develop origin/develop

開(kāi)發(fā)者A與B并行開(kāi)發(fā)功能

開(kāi)發(fā)者A與B開(kāi)始各自的功能開(kāi)發(fā)阀捅,工作應(yīng)在新分支上展開(kāi),新的Feature分支應(yīng)基于
Develop分支建立针余。
git checkout -b feature-X develop

在各自功能分支上進(jìn)行編輯饲鄙、暫存、提交:
git status git add git commit

開(kāi)發(fā)者A完成并提交新功能

開(kāi)發(fā)者A在完成功能后首先從從遠(yuǎn)程獲取Develop分支最新版本并merge到本地圆雁。
git pull origin develop
將Feature分支合并至本地Develop分支忍级。
git checkout develop git merge feature-A


合并成功后推送至遠(yuǎn)程倉(cāng)庫(kù)。
git push origin develop
推送時(shí)可能遇到?jīng)_突解決伪朽,則先git pull抓取最新提交再在本地解決沖突后再push轴咱。

開(kāi)發(fā)者A進(jìn)行版本發(fā)布

開(kāi)發(fā)者A完成功能準(zhǔn)備進(jìn)行版本發(fā)布時(shí),基于Develop分支創(chuàng)建Release分支驱负,這個(gè)分支是清理發(fā)布嗦玖、執(zhí)行所有測(cè)試、更新文檔和其它為下個(gè)發(fā)布做準(zhǔn)備操作的地方跃脊,像是一個(gè)專門用于改善發(fā)布的功能分支宇挫。
git checkout -b release-0.1 develop
當(dāng)準(zhǔn)備好發(fā)布時(shí),開(kāi)發(fā)者A將首先發(fā)布分支合并回master分支酪术,并push到服務(wù)器倉(cāng)庫(kù)器瘪。
git checkout master git merge release-0.1 git push
只要有合并到master分支翠储,就應(yīng)該打好Tag
以方便跟蹤。
git tag -a 0.1 -m "Initial public release" master git push --tags
在發(fā)布分支中已經(jīng)提交的更新需要在后面的新功能中也要是可用的橡疼,所以應(yīng)合并至Develop分支援所。之后刪除發(fā)布分支。
git checkout develop git merge release-0.1 git push git branch -d release-0.1

Bug反饋與修復(fù)

當(dāng)發(fā)布后收到Bug反饋后欣除,開(kāi)發(fā)者從master
分支上拉出了一個(gè)維護(hù)分支Hotfix住拭,提交修改以解決問(wèn)題,然后直接合并回master分支:

git checkout -b hotfix master
/*Fix the bug*/
git checkout master
git merge hotfix
git push

與發(fā)布分支一樣历帚,維護(hù)分支中新加這些重要修改需要包含到develop分支中滔岳。

git checkout develop
git merge hotfix
git push
git branch -d hotfix
最后編輯于
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請(qǐng)聯(lián)系作者
  • 序言:七十年代末,一起剝皮案震驚了整個(gè)濱河市挽牢,隨后出現(xiàn)的幾起案子谱煤,更是在濱河造成了極大的恐慌,老刑警劉巖禽拔,帶你破解...
    沈念sama閱讀 216,496評(píng)論 6 501
  • 序言:濱河連續(xù)發(fā)生了三起死亡事件刘离,死亡現(xiàn)場(chǎng)離奇詭異,居然都是意外死亡睹栖,警方通過(guò)查閱死者的電腦和手機(jī)硫惕,發(fā)現(xiàn)死者居然都...
    沈念sama閱讀 92,407評(píng)論 3 392
  • 文/潘曉璐 我一進(jìn)店門,熙熙樓的掌柜王于貴愁眉苦臉地迎上來(lái)磨淌,“玉大人疲憋,你說(shuō)我怎么就攤上這事凿渊×褐唬” “怎么了?”我有些...
    開(kāi)封第一講書人閱讀 162,632評(píng)論 0 353
  • 文/不壞的土叔 我叫張陵埃脏,是天一觀的道長(zhǎng)搪锣。 經(jīng)常有香客問(wèn)我,道長(zhǎng)彩掐,這世上最難降的妖魔是什么构舟? 我笑而不...
    開(kāi)封第一講書人閱讀 58,180評(píng)論 1 292
  • 正文 為了忘掉前任,我火速辦了婚禮堵幽,結(jié)果婚禮上狗超,老公的妹妹穿的比我還像新娘。我一直安慰自己朴下,他們只是感情好努咐,可當(dāng)我...
    茶點(diǎn)故事閱讀 67,198評(píng)論 6 388
  • 文/花漫 我一把揭開(kāi)白布。 她就那樣靜靜地躺著殴胧,像睡著了一般渗稍。 火紅的嫁衣襯著肌膚如雪佩迟。 梳的紋絲不亂的頭發(fā)上,一...
    開(kāi)封第一講書人閱讀 51,165評(píng)論 1 299
  • 那天竿屹,我揣著相機(jī)與錄音报强,去河邊找鬼。 笑死拱燃,一個(gè)胖子當(dāng)著我的面吹牛秉溉,可吹牛的內(nèi)容都是我干的。 我是一名探鬼主播碗誉,決...
    沈念sama閱讀 40,052評(píng)論 3 418
  • 文/蒼蘭香墨 我猛地睜開(kāi)眼坚嗜,長(zhǎng)吁一口氣:“原來(lái)是場(chǎng)噩夢(mèng)啊……” “哼!你這毒婦竟也來(lái)了诗充?” 一聲冷哼從身側(cè)響起苍蔬,我...
    開(kāi)封第一講書人閱讀 38,910評(píng)論 0 274
  • 序言:老撾萬(wàn)榮一對(duì)情侶失蹤,失蹤者是張志新(化名)和其女友劉穎蝴蜓,沒(méi)想到半個(gè)月后碟绑,有當(dāng)?shù)厝嗽跇?shù)林里發(fā)現(xiàn)了一具尸體,經(jīng)...
    沈念sama閱讀 45,324評(píng)論 1 310
  • 正文 獨(dú)居荒郊野嶺守林人離奇死亡茎匠,尸身上長(zhǎng)有42處帶血的膿包…… 初始之章·張勛 以下內(nèi)容為張勛視角 年9月15日...
    茶點(diǎn)故事閱讀 37,542評(píng)論 2 332
  • 正文 我和宋清朗相戀三年格仲,在試婚紗的時(shí)候發(fā)現(xiàn)自己被綠了。 大學(xué)時(shí)的朋友給我發(fā)了我未婚夫和他白月光在一起吃飯的照片诵冒。...
    茶點(diǎn)故事閱讀 39,711評(píng)論 1 348
  • 序言:一個(gè)原本活蹦亂跳的男人離奇死亡凯肋,死狀恐怖,靈堂內(nèi)的尸體忽然破棺而出汽馋,到底是詐尸還是另有隱情侮东,我是刑警寧澤,帶...
    沈念sama閱讀 35,424評(píng)論 5 343
  • 正文 年R本政府宣布豹芯,位于F島的核電站悄雅,受9級(jí)特大地震影響,放射性物質(zhì)發(fā)生泄漏铁蹈。R本人自食惡果不足惜宽闲,卻給世界環(huán)境...
    茶點(diǎn)故事閱讀 41,017評(píng)論 3 326
  • 文/蒙蒙 一、第九天 我趴在偏房一處隱蔽的房頂上張望握牧。 院中可真熱鬧容诬,春花似錦、人聲如沸沿腰。這莊子的主人今日做“春日...
    開(kāi)封第一講書人閱讀 31,668評(píng)論 0 22
  • 文/蒼蘭香墨 我抬頭看了看天上的太陽(yáng)矫俺。三九已至吱殉,卻和暖如春掸冤,著一層夾襖步出監(jiān)牢的瞬間,已是汗流浹背友雳。 一陣腳步聲響...
    開(kāi)封第一講書人閱讀 32,823評(píng)論 1 269
  • 我被黑心中介騙來(lái)泰國(guó)打工稿湿, 沒(méi)想到剛下飛機(jī)就差點(diǎn)兒被人妖公主榨干…… 1. 我叫王不留,地道東北人押赊。 一個(gè)月前我還...
    沈念sama閱讀 47,722評(píng)論 2 368
  • 正文 我出身青樓饺藤,卻偏偏與公主長(zhǎng)得像,于是被迫代替她去往敵國(guó)和親流礁。 傳聞我的和親對(duì)象是個(gè)殘疾皇子涕俗,可洞房花燭夜當(dāng)晚...
    茶點(diǎn)故事閱讀 44,611評(píng)論 2 353

推薦閱讀更多精彩內(nèi)容

  • 多種多樣的工作流使得在項(xiàng)目中實(shí)施Git時(shí)變得難以選擇。這份教程提供了一個(gè)出發(fā)點(diǎn)神帅,調(diào)查企業(yè)團(tuán)隊(duì)最常見(jiàn)的Git工作流再姑。...
    JSErik閱讀 4,403評(píng)論 2 8
  • Git分支管理 master:主分支,當(dāng)前分支上的代碼隨時(shí)可以直接發(fā)布找御,并且只能通過(guò)Pull Request從其他...
    UEUEO閱讀 9,654評(píng)論 5 33
  • 當(dāng)這個(gè)世界在我眼波里蕩漾元镀, 搖擺的身姿注定我終生凝望。 新舊悲傷滲透出來(lái)煙波浩淼霎桅, 在黑暗的河床上默然地裸露栖疑, 必...
    摩詰梵心閱讀 363評(píng)論 6 4
  • 這兩天閑來(lái)無(wú)事,就把前短時(shí)間項(xiàng)目中的搜索功能抽取出來(lái)滔驶,重新寫一下遇革,搜索功能雖然簡(jiǎn)單,但是設(shè)計(jì)到得知識(shí)點(diǎn)也挺多的揭糕,就...
    Zeller閱讀 9,561評(píng)論 3 31
  • 0 我左手邊平躺著才買不久的手機(jī)萝快,右手邊立著正充電的平板電腦,這些曾經(jīng)耗費(fèi)我?guī)讉€(gè)月生活費(fèi)買來(lái)的物件后來(lái)長(zhǎng)期占據(jù)著我...
    清水小和尚閱讀 446評(píng)論 3 4