基於git的簡單實用的版本管理規範及流程,包括:代碼庫的分佈、人員角色的劃分、代碼提交合並流程、代碼衝突處理、分支管理。
對於企業用戶,推薦使用CODING 企業版。git
代碼庫分類
根據代碼庫分佈的位置及做用,分爲如下幾類:安全
- 主庫:位於服務端,全部開發的代碼最終都要合到主庫。
- 我的代碼庫(服務端):從主庫fork出來,位於服務端。每一個人自已開發的代碼,由本地的git庫push到每一個人本身的我的代碼庫(服務端),再由我的代碼庫(服務端)合入主加。
- 我的工做庫:位於每一個開發人員的開發機器,從我的代碼庫(服務端)clone到本地。每一個開發人員開發的代碼,先commit到我的工做庫,再由我的工做庫push到我的代碼庫(服務端)。
人員角色分類
這裏說的角色,都是人員在主庫上的角色。基於簡化的原則,人員分爲三類:測試
- Owner:擁有主庫的全部權限。
- Committer:具備將開發人員的合併需求(MR)合入主庫的權限。基於安全考慮,咱們設置爲只能經過MR的方式將代碼合入主庫,而不能直接push到主庫。
- Developer:只能從本身的我的代碼庫(服務端)提交合並代碼的請求(MR),是否可以合入,由Committer進行審覈。
在CODING 企業版中,Committer在進行MR以前,能夠對Developer提供的代碼進行review,輸入評審意見,並@給相關人員。
.net
基本流程
在主庫已經存在的狀況下,平常操做流程以下:3d
- 開發人員從主庫fork出本身的我的代碼庫。
- 開發人員將本身的我的代碼庫clone到本地,即我的工做庫。
- 開發人員在開發了新代碼後(包括新增和修改),先將代碼commit到本身的我的工做庫,再由我的工做庫push到我的代碼庫。
- 開發人員提交從我的工做庫到主庫的MR,Committer審覈後,決定是否將MR合入主庫。
- 每一個開發人員從主庫pull最新代碼到我的工做庫。
分支管理
- 主庫缺省的master分支,是用來向生產環境發佈的,全部合入的代碼,原則上都必須是穩定的。
- 主庫除了master分支外,至少還要有一個活動分支,命名建議爲:br_工程名_active,平時平常的開發都基於活動分支開發。即從我的工做庫提交MR到主庫時,指向的是主庫的活動分支。活動分支測試穩定後,將主庫的活動分支經過MR的形式,合併到主庫的master分支,同時打上tag。
- 若是軟件運行過程當中發現必須當即修改的bug,則從主庫的master分支中,拉出一個bugfix分支。爲修復這個bug的全部開發,都基於bugfix分支。待bugfix分支開發完成,並測試穩定後,將bugfix分支以MR的方合入主庫的master分支。而後刪除bugfix分支,視狀況決定是否打tag。
在CODING 企業版中,合併分支的同時,能夠選擇是否刪除源分支,十分方便。
code
常見問題
此部份內容會根據狀況進行相應的增長。blog
活動分支合入主分支時發生衝突
產生緣由
平時基於活動分支開發,若是這個過程當中爲了修復bug而拉了一個bugfix分支,當bugfix分支開發完成併合入master分支後,若是bugfix分支和活動分支修改了相同的文件,則在活動分支合入master分支時就會產生衝突。生命週期
解決方法
- 從我的代碼庫(服務端)clone一個庫到本地,即專門用於合併的我的工做庫。(也能夠用以前的我的工做庫,但初學都容易混淆,建議單獨clone一個。)
- 從主庫的活動分支上pull最新的代碼到本地。
- 從主庫的master分支上pull最新的代碼到本地。
- 此時會產生衝突,手工修復衝突,而後先commit到本地的我的工做庫,再push到我的代碼庫(服務端)。
- 提交從我的工做庫(服務端)到主庫的MR(此時不會再有衝突),而後由Committer審覈後將MR合入主庫。
CODING 企業版簡介
CODING企業版提供整套企業級的軟件研發管理系統,讓企業的管理人員能夠更好地進⾏研發團隊的項⽬管理,便捷而深刻地把握開發進度,讓開發流程⾼效可控。
CODING企業版從項⽬的管理,到代碼管理,直到代碼的推送和部署,CODING 企業版提供了一整套的完整解決方案。
項目管理
企業管理
企業管理提供企業個性化定製、企業概覽和統計、項⽬及成員批量管理、項⽬權限一鍵開關、安全管理等一系列功能,能夠知足企業基本管理的需求。開發
項目管理
提供當前企業最前沿的敏捷開發,全生命週期項⽬和任務管理,幫助企業更好的管理項⽬和任務,以應對快速變化的IT項⽬管理需求。
- 簡潔高效的任務指派
- 雲端共享的項目文件
- 系統化的 Wiki 知識庫
- 多維度的項目統計
代碼管理
代碼管理提供以Git爲基礎的平常開發源代碼版本管理,包括代碼瀏覽、分⽀管理、發佈管理、版本對比、合併請求、項⽬⽹絡等,提供強於Git 的代碼管理使用體驗。