前言
沒有什么規(guī)則是完全正確的答憔,但如果沒有大家統(tǒng)一認(rèn)可的規(guī)則攘已,各自為戰(zhàn)女蜈,事情將會(huì)變成一團(tuán)糟验烧。
代碼倉庫與分支管理
SVN分支管理
很多創(chuàng)業(yè)公司的代碼倉庫是使用的SVN板驳,集中式代碼倉庫,我們最初用的也是碍拆,很古老的工具若治,我知道。
使用SVN感混,有兩種開發(fā)模式直砂,
主干開發(fā)
所有研發(fā)開發(fā)不拉新分支,在本地開發(fā)完一部分后commit到master浩习,有沖突及時(shí)解決静暂。理念是因?yàn)榻鉀Q大沖突很痛苦,所以要經(jīng)常解決小沖突谱秽,永遠(yuǎn)保證master代碼是可發(fā)布的狀態(tài)洽蛀,小步迭代,快速交付疟赊。事實(shí)上這個(gè)理念相當(dāng)理想郊供,基本不可能實(shí)現(xiàn)。
這個(gè)是建立在每個(gè)研發(fā)的代碼質(zhì)量很高近哟,并且可以自覺且完整地測試驮审,以保證0 bug commit到master,或有全面的回歸測試吉执,才能保證master代碼永遠(yuǎn)是可發(fā)布狀態(tài)疯淫。
在初創(chuàng)公司,如果你用SVN戳玫,千萬不要作這個(gè)死熙掺。如果你這么用的話,經(jīng)常會(huì)發(fā)現(xiàn)咕宿,master代碼都是半成品或充滿bug币绩,這時(shí)候如果有高優(yōu)需求或hotfix蜡秽,只能各種翻svn log,退回分支開發(fā)缆镣。分支開發(fā)
分支開發(fā)會(huì)更常見些芽突,每次新迭代開始,或有新功能開發(fā)時(shí)董瞻,都從master上拉出一個(gè)開發(fā)分支诉瓦,相當(dāng)于全量拷貝一份代碼到新分支上。
在新分支上進(jìn)行開發(fā)力细,開發(fā)完之后睬澡,可以直接將這個(gè)分支發(fā)布到生產(chǎn)環(huán)境,也可以將代碼合并到Master眠蚂,然后發(fā)布master到生產(chǎn)環(huán)境煞聪。
當(dāng)然,我們強(qiáng)烈建議先把分支代碼合并到master逝慧,再發(fā)布master代碼昔脯,通過流程強(qiáng)制約束master代碼永遠(yuǎn)是最新的。如果有多個(gè)分支并行開發(fā)笛臣,合并代碼的時(shí)候可能會(huì)比較痛苦云稚,要去解決沖突。
基本這么做的話沈堡,也不會(huì)有什么大問題静陈。除了開分支的時(shí)候全量拷貝比較蛋疼。
Git分支管理
Git诞丽,是大神linus繼linux內(nèi)核之后的又一神級(jí)的產(chǎn)品鲸拥。在理念上領(lǐng)先svn一個(gè)時(shí)代。詳細(xì)可以從網(wǎng)上看svn僧免,git的對(duì)比刑赶。對(duì)我而言,git和svn的不同懂衩,主要表現(xiàn)在
- svn是集中式的撞叨,只有一個(gè)中心。而git是分布式的浊洞,每個(gè)人都可以有全量的代碼牵敷。從命令上就可以體現(xiàn)出來,
svn checkout
V.S.git clone
- svn創(chuàng)建新分支是從master拷貝全量的文件到新branch沛申,git是增量的劣领。所以同時(shí)開10個(gè)分支,svn的源文件會(huì)變成10份铁材,而git不會(huì)尖淘。
實(shí)際使用中,可以采用git-flow的方式著觉,將各類branch細(xì)化使用村生。主要分這么幾類分支
- master
- release
- dev-branch
- hotfix
詳情可以參考阮一峰-Git 工作流程,不展開了饼丘。