原文鏈接:https://www.atlassian.com/git/tutorials/comparing-workflows
集中式工作流

一般來說,Git 的好處在于分布式的工作流,但是也可以使用傳統(tǒng)的工作流方式(如果整個(gè)開發(fā)團(tuán)隊(duì)從SVN轉(zhuǎn)Git,大家都不太熟悉分布式工作流的時(shí)候,可以考慮前期先用這種方式熟悉哦?。?/p>
講點(diǎn)理論
Git的好處( vs SVN)
- 每個(gè)人都有一份完整的庫的代碼,這樣每個(gè)人都可以獨(dú)立開發(fā)互不影響,隨時(shí)提交,方便的時(shí)候再和其他人的合并
- 有強(qiáng)大的分支和合并機(jī)制,庫之間合并起來非常方便而且最大限度容錯(cuò)
怎么做
- 和SVN一樣,大家都把代碼提交到同一個(gè)庫的同一個(gè)分支上(比如master或者develop),不需要其他分支
- 克隆這個(gè)分支到本地,在本地分支上進(jìn)行開發(fā)(可以在本地進(jìn)行獨(dú)立的提交等)
- push到線上
處理沖突

- 如果提交的本地分支和線上分支的提交記錄有不同的地方,Git會(huì)拒絕接收提交
- 提交之前應(yīng)該先拉一把,然后Git會(huì)保證你的所有本地變更,是基于最新的線上代碼之上的(rebasing)。這樣做的結(jié)果,是形成一個(gè)線性的歷史記錄,和SVN的工作流一樣。
- 如果線上的最新版本代碼和本地提交代碼有直接沖突,Git會(huì)讓你處理沖突
來點(diǎn)實(shí)踐
額...暫缺
下一步
從上面的小栗子可以看到,用Git其實(shí)是可以完全賦值SVN的使用方法的,但是,這樣做并沒有充分利用Git的分布式特性。
如果團(tuán)隊(duì)已經(jīng)適應(yīng)了集中式的工作流,但是想簡化多人開發(fā)的合作的過程,可以探索下Feature Branch Workflow —— 之前把每次提交都直接集成到主分支上,用這種模式,可以在把新特性提交到主分支之前,對(duì)要提交的代碼,發(fā)起一輪討論 —— 適合用來做code review哦!
Feature Branch Workflow

熟悉了集中式之后,可以為流程中添加feature branches,這樣可以促進(jìn)合作降低開發(fā)者間的交流成本。
這種方式的核心在于,所有功能開發(fā),不能在主分支進(jìn)行,而應(yīng)該在獨(dú)立分支進(jìn)行。
這種方式,讓多人合作開發(fā)一個(gè)功能而不影響主代碼更簡單。同時(shí)也意味著,主分支永遠(yuǎn)不會(huì)包含未完成的代碼,這一點(diǎn)對(duì)持續(xù)集環(huán)境成非常重要。
這種方式,可以使用pull request方案來為提交的分支添加評(píng)論 - 讓另一個(gè)開發(fā)者有機(jī)會(huì)對(duì)你開發(fā)的東東進(jìn)行code review,也可以通過pull request的方式邀請(qǐng)別人幫你解決問題。pull request讓團(tuán)隊(duì)交流非常容易。
講點(diǎn)理論
怎么做
這種方案依然使用一個(gè)中央倉庫,master分支依然是正式分支。但是開發(fā)者不能直接提交到這個(gè)分支,而是每次做一個(gè)新功能的時(shí)候,創(chuàng)建一個(gè)新分支。這個(gè)功能分支,應(yīng)該有一個(gè)能夠自解釋的名字。
Pull Request
開發(fā)完一個(gè)功能以后,別立刻merge到master上,而是應(yīng)該新建一個(gè)pull request,讓其他開發(fā)者看看,能不能merge到master上。這樣就能保證,在你寫的代碼合并到主分支之前,其他開發(fā)者有機(jī)會(huì)review到這些change。
除此之外,還能用在代碼討論上,也就是說在開發(fā)流程的前期也可以應(yīng)用。
一旦一個(gè)pr被接受,那么發(fā)布一個(gè)功能就和集中式的差不多了。首先,需要確保本地代碼是最新的,然后把你的分支merge到主分支就好了。
來點(diǎn)實(shí)踐
額......暫缺
下一步
Feature Branch Workflow是一種非常自由的開發(fā)模式,但是它太自由了。大型團(tuán)隊(duì)開發(fā)的時(shí)候,有的時(shí)候需要需要給分支配置多種不同的角色,這個(gè)時(shí)候,Gitflow workflow就登場了!
Gitflow Workflow

Forking Workflow
