以Gitlab程式碼託管平臺說明,也是目前應用最為廣泛的企業搭建私服的選擇。
1. 許可權管理
[專案] 存取許可權有3種::Private、Internal、Public
Private:只有組成員才能看到
Internal:只要登入的使用者就能看到
Public:所有人都能看到
[專案成員] 有五種許可權及其適用物件:Guest、Reporter、Developer、Maintainer、Owner
Guest:可以建立issue、發表評論,不能讀寫專案 【遊客】
Reporter:可以克隆程式碼,不能提交 【QA,PM】
Developer:開發者可以克隆程式碼,開發,提交,push 【RD】
Maintainer:管理員可以建立專案,新增tag,保護分支,新增專案成員 【RD組長】
Owner:最高許可權,管理組成員,刪除專案,遷移專案 【研發負責人】
2. 分支管理
2.1 基礎概念:
版本衝突:合併分支時,當Git發現同一個檔案中的同一塊資料在兩邊的提交歷史中都有變更,它將無法自動對其進行合併,產生衝突,需要人為介入修改,再合併。
# On branch master
一條合併命令:git merge featureA
兩種合併方式:當執行merge命令時,git合併演演算法會根據當前分支(master)的最後一次commit與「特性分支」(featureA)的最後一次commit的情況,來決定合併方式是 「快進式合併」 還是 「遞迴三路合併」。
快進式合併:程式碼分支情況如下,預設合併方式為快進式合併,只是將master分支的HEAD指標右移,不會建立新的merge記錄。
缺點:若版本直接回滾,只會回退到featureA的上一次commit節點,原master分支上可能仍遺留featureA的程式碼,回退不乾淨。
遞迴三路合併:程式碼分支情況如下,合併方式為三路合併,此時merge演演算法會遞迴向前找到兩個分支的共同「祖先」節點,判斷各自檔案修改點作為合併內容,若無程式碼衝突均會自動合併完成, 產生新的merge記錄。
[所以推薦] 使用引數 「--no -ff」
git merge featureA --no -ff #禁止快進式合併稱為普通合併,各種請款下總會建立一個merge記錄,方便追溯
若版本直接回退,直接回退到原始master指標節點。
2.2 研發分支過程管理
主幹分支為master,dev-test為開發分支,test為測試分支,pre為預發分支, release為上線分支
每個一個需求為一個特性分支,命名為feature-XXX
特性分支開發過程中外部聯調需要時合併至dev-test
特性分支開發完成後合併至test,提交測試
測試完成後合併至pre,進行預發測試
預發測試完成後合併至上線分支release-{date}, release-{date}由最新master派生
如果在測試期間出現BUG需要在feature分支修復,併合並至整合分支(dev-test, test, pre).
dev-test期間合併dev-test
test期間合併至dev-test, test
pre期間合併至dev-test, test, pre
release期間合併至dev-test, test, pre, release
線上出現Bug需要修復時等同一個需求走feature分支開發流程
2.3 常見分支問題
團隊中新人可能是對Git不熟悉也可能是合併到整合分支 dev-test, test時衝突比較多想把dev-test,test程式碼合併到本地來解決,從而把別人開發功能的程式碼合併到自己的分支,上線時就把別人分支(不是本次上線的功能)上到正式環境了,導致線上事故。
git checkout feature-xxx
git merge test
在開發過程中Bug修復時一般需要在自己的特性分支修改程式碼,修改完成後再依次合併到dev-test, test, pre讓測試驗證是否修復完成,但有時圖方便或是時間問題就直接合併到pre讓測試驗證, 這樣測試環境上就帶有bug。然後就有一種常見的情況,在測試環境迴歸功能又發現了此Bug,開發就納悶修復過了為何還有,其實就程式碼沒有合併。
git checkout feature-xxx # fix bug .. git checkout pre && git pull git merge feature-xxx # 沒有合併至dev-test, test