前言
最近換了一個(gè)新公司之景,因?yàn)橹白鲞^幾年的開發(fā),也有過一定的管理經(jīng)驗(yàn)熊尉,所以公司很器重罐柳,也希望自己能改善公司iOS團(tuán)隊(duì)的現(xiàn)狀。
既然有這樣的機(jī)會(huì)狰住,自己當(dāng)然要好好把握了张吉。這也許是自己面向真正管理的第一步吧。
因?yàn)楣緢F(tuán)隊(duì)比較年輕催植,為了以后可以更好的管理團(tuán)隊(duì),首先制定了代碼規(guī)范创南。后來伦忠,發(fā)現(xiàn)公司代碼管理也不是很好稿辙,于是就參考市面代碼管理方案,寫了下面的總結(jié)邻储。
背景
目前市面管理代碼的工具主要有SVN和Git兩種赋咽,而Git以分布式管理最終受到廣大程序員的喜愛。
主流的Git工作流有3種:
1. 集中式工作流吨娜,類似傳統(tǒng)的SVN脓匿,沒有很好的發(fā)揮Git的功效;
2. 功能分支工作流宦赠,在master分支上創(chuàng)建功能分支陪毡,在功能分支上開發(fā)新需求,開發(fā)完畢后勾扭,合并到master分支缤骨;這種工作流方式適合小團(tuán)隊(duì)的開發(fā),如果是大的團(tuán)隊(duì)尺借,這種方式會(huì)有一些小麻煩绊起,于是有了下一個(gè)工作流;
3. Gitflow工作流燎斩,本文也主要介紹此工作流虱歪;
下面是一張Gitflow工作流的示意圖:
工作方式
Gitflow工作流主要有兩個(gè)分支蜂绎,master和develop分支,所有的操作都圍繞著兩個(gè)分支來做的笋鄙,這兩個(gè)分支代表了研發(fā)過程中的兩個(gè)重要環(huán)節(jié):發(fā)版和開發(fā)师枣。master是一個(gè)隨時(shí)可以發(fā)版的分支,而develop是一個(gè)隨時(shí)可以開發(fā)新功能的分支萧落。接下來践美,配合SourceTree工具詳細(xì)說明一下Gitflow在不同的階段是如何工作的。
初始化
首先將遠(yuǎn)程代碼倉(cāng)庫(kù)clone到本地找岖,打開SourceTree陨倡,在右上角有一個(gè)Git Flow的按鈕,單擊后如圖:
建議不做任何修改许布,直接OK兴革。SourceTree會(huì)自動(dòng)化進(jìn)行一些操作,最明顯的變化是多了一個(gè)develop分支蜜唾。
將新建的develop分支推送到遠(yuǎn)端倉(cāng)庫(kù)杂曲。從此,代碼庫(kù)里就存在了兩個(gè)永久性的分支:master和develop袁余,未來所有的開發(fā)工作都圍繞這兩個(gè)分支進(jìn)行派生跟合并擎勘。這兩個(gè)分支也被稱為“歷史性”分支。
新功能開發(fā):創(chuàng)建feature分支颖榜,合并feature分支
當(dāng)進(jìn)入開發(fā)階段棚饵,需要開發(fā)新功能時(shí),需要先創(chuàng)建一個(gè)新的分支朱转,注意,這個(gè)分支使用develop分支作為父分支积暖,當(dāng)新功能完成后合并到develop分支藤为,新功能提交不應(yīng)該直接與master分支交互。
使用SourceTree可以很方便完成這一過程夺刑,初始化結(jié)束后缅疟,再次單擊GitFlow按鈕,如圖遍愿,選擇New Feature存淫,然后輸入分支名稱。
當(dāng)新功能開發(fā)完成后沼填,需要合并分支到develop分支桅咆,這時(shí)單擊GitFlow按鈕,選擇Finish Current按鈕坞笙,使用默認(rèn)設(shè)置岩饼,單擊OK荚虚。
提測(cè)階段:創(chuàng)建release分支籍茧,合并release分支
當(dāng)開發(fā)進(jìn)入到測(cè)試階段時(shí),需要給測(cè)試人員提供測(cè)試包寞冯,此時(shí)需要在develop創(chuàng)建release分支,測(cè)試階段出現(xiàn)的bug俭茧,在release分支上進(jìn)行修改,測(cè)試通過后螟蝙,將release分支合并到develop和master分支。
使用SourceTree實(shí)現(xiàn)這一過程场斑,繼續(xù)單擊GitFlow按鈕牵署,如圖,選擇New Release奴迅,然后輸入分支名,單擊OK取具。
測(cè)試結(jié)束后,合并release分支产阱,繼續(xù)單擊GitFlow按鈕块仆,選擇Finish Current按鈕,使用默認(rèn)設(shè)置悔据,然后輸入Tag名庄敛,單擊OK藻烤。
確認(rèn)沒有沖突后隐绵,將本地推送到遠(yuǎn)程倉(cāng)庫(kù)。
線上維護(hù):創(chuàng)建hotfix分支依许,合并hotfix分支
當(dāng)產(chǎn)品通過測(cè)試后,就會(huì)發(fā)版上線峭跳。可能會(huì)遇到一個(gè)緊急問題需要解決蛀醉。這時(shí)需要?jiǎng)?chuàng)建hotfix分支了,需要注意拯刁,hotfix分支是唯一從master分支fork出來的分支。修復(fù)完后割捅,需要立即合并到master分支和develop分支帚桩,master分支應(yīng)該用新的版本號(hào)打好tag亿驾。
使用SourceTree完成這一過程步驟莫瞬,繼續(xù)單擊GitFlow按鈕郭蕉,如圖,選擇New Hotfix按鈕召锈,輸入分支名稱。
修改规求,測(cè)試筐付,都需要在這個(gè)分支上完成。當(dāng)測(cè)試通過后沮尿,合并分支,繼續(xù)單擊GitFlow按鈕畜疾,如圖,選擇Finish Current按鈕姥敛,輸入tag名稱,選擇OK瞎暑。
確定沒有沖突后了赌,將修改推送到遠(yuǎn)端倉(cāng)庫(kù)。
Git網(wǎng)絡(luò)圖如下:
至此一個(gè)完整的開發(fā)周期結(jié)束袄秩,當(dāng)然上面僅僅模擬了一個(gè)簡(jiǎn)單開發(fā)周期,真正的開發(fā)一定會(huì)比較復(fù)雜之剧,但只要按照這個(gè)流程管理代碼筒狠,再?gòu)?fù)雜的開發(fā)情況,也不會(huì)出現(xiàn)問題辩恼。
唯一需要注意的時(shí)候,在合并代碼時(shí)會(huì)出現(xiàn)沖突灶伊,一定要先解決沖突后再推送到遠(yuǎn)端倉(cāng)庫(kù)。
唯一需要注意的時(shí)候聘萨,在合并代碼時(shí)會(huì)出現(xiàn)沖突,一定要先解決沖突后再推送到遠(yuǎn)端倉(cāng)庫(kù)胸完。
唯一需要注意的時(shí)候,在合并代碼時(shí)會(huì)出現(xiàn)沖突翘贮,一定要先解決沖突后再推送到遠(yuǎn)端倉(cāng)庫(kù)。
重要的事情說三遍锨能。
如果你是喜歡終端開發(fā)的,Gitflow也提供了相應(yīng)的工具址遇。無論是GUI還是終端,Gitflow提供的是一套完善的代碼管理流程倔约,只要理解了這個(gè)流程,使用什么都可以飛浸剩。
參考:
Git版本控制與工作流
Git工作流指南:Gitflow工作流
end