詳細內容看:https://github.com/xirong/my-...git
集中式工做流是集中式版本控制工具中經常使用的開發流程,以主分支(mater)
爲核心,全部開發人員經過更新主分支代碼完成代碼的開發工做。github
工做流程是這樣的:bash
子旺
和金康
,他們兩我的分別克隆了遠程的倉庫gitdemo
子旺
進行了一次提交,遠程倉庫就多了一個版本的提交git push orgin master
金康
想要提交到遠程倉庫,發現沒辦法提交push
,須要先git pull --rebase origin master
拉取的時候,同時進行變基操做,保證代碼版本歷史的漂亮
(固然這種漂亮有時候也須要付出一些代價)push
前須要先pull
。(不斷的pull
是很是友好的,也是公司開發須要的)功能分支工做流以集中式工做流爲基礎,不一樣的是爲各個新功能分配一個專門的分支來開發。這樣能夠在把新功能集成到正式項目前,用Pull Requests
的方式討論變動。pull requests
工做流能爲每一個分支發起一個討論,在分支合入正式項目以前,給其它開發者有表示贊同的機會。工具
工做流程是這樣的:fetch
子旺
在master
分支上開了一個功能分支feature-xxx
,如今子旺餓了,要去吃點東西,在去以前要把編寫的代碼提交push
git push -u origin feature-xxx
(-u
選項設置本地分支去跟蹤遠程對應的分支)到遠程的feature-xxx
分支上面。子旺
完成了功能開發,而且push
到他的遠程分支feature-xxx
,他發起一個Pull Request
讓團隊的其它人知道功能已經完成。金康
變成了領導,領導收到了子旺
發來的pull request
,金康
對工做有些不滿意,因此讓子旺
進行修改,這些修改對話都是在pull request上完成的
。終於,金康
接受了pull request
進行了merge
,金康
在合併前必定要檢出master
分支並確認是它是最新的,這樣才能夠合併到master
上。Gitflow
工做流master
分支,Gitflow
工做流使用兩個分支來記錄項目的歷史。master
分支存儲了正式發佈的歷史,而develop
分支做爲功能的集成分支。push
到中央倉庫以備份和協做。但功能分支不是從master分支
上拉出新分支,而是使用develop分支
做爲父分支。develop
分支上有了作一次發佈的功能,就從develop
分支上checkout
一個發佈release分支
。 新建的分支用於開始發佈循環,因此從這個時間點開始以後新的功能不能再加到這個分支上-----這個分支只應該作Bug修復、文檔生成和其它面向發佈任務
。 一旦對外發布的工做都完成了,發佈release分支合併到master分支
並分配一個版本號打好Tag
。 另外,這些重新建發佈分支以來的作的修改要合併回develop分支
。hotfix
)分支用於給產品發佈版本快速生成補丁,這是惟一能夠直接從master分支fork出來的分支
。 修復完成,修改應該立刻合併回master分支和develop分支
(當前的發佈分支),master分支
應該用新的版本號打好Tag
。
Forking
工做流Forking工做流
和前面討論的幾種工做流有根本的不一樣,這種工做流不是使用單個服務端倉庫做爲『中央』代碼基線,而讓各個開發者都有一個服務端倉庫。這意味着各個代碼貢獻者有2個Git倉庫而不是1個
:一個本地私有的,另外一個服務端公開的。spa
工做流程是這樣的:版本控制
金康
出去創業了,開了一家新公司,可是子旺捨不得金康,因此還在幫助金康開發,如今金康
初識化了一個倉庫,並進行了一些提交,本身在玩。子旺
是一個好心人,想幫助金康
作一些貢獻,所以子旺fork了金康的項目
,此時子旺
須要在本身的倉庫中開設2個遠程別名
—— 一個指向正式倉庫(金康的倉庫
),另外一個指向開發者本身的服務端倉庫(子旺的倉庫
)。這樣作的目的是爲了可以拉取金康的倉庫更新
。代碼以下:# 給金康的倉庫起了一個遠程別名 upstream git remote add upstream https://github/guojinkang/gitdemo git pull upstream master
子旺
完成了功能的開發,準備合併到金康的庫上
,須要先進行一個pull request
,他想集成他的功能分支到上游遠程倉庫的master
分支中金康
收到了pull request
,金康
此時要檢查子旺
的代碼是否能夠合併 git fetch https://github/fuziwang/gitdemo feature-branch
發現能夠合併,所以進行合併。子旺
須要拉取最新的代碼 git pull upstream master