項目組GitLab使用規范
1. 基本信息
(1) 項目組GitLab地址
(2) 協作開發模式
開發人員采用fork主倉庫的方式進行開發。
為簡化開發過程,方便代碼集成。主倉庫僅包括兩個常駐分支master和hotfix。兩個分支都是受保護的。master是代碼主分支,主要的開發、代碼集成、發布都在此分支上進行。hotfix用於臨時bug修復或問題處理。
(3) 成員角色
項目組成員包含兩種權限Master和Developer。主倉庫中受保護的分支只有Master成員可以處理代碼合並Merge Request和push。
(4) 代碼倉庫
開發過程中涉及的代碼倉庫包括:主倉庫、個人遠程倉庫和本地倉庫,它們之間的關系如下圖所示:
主倉庫MAIN:位於服務器上代碼主倉庫,常駐分支master和hotfix,分支均受保護,只有從開發者個人遠程倉庫發起Merge Request(下文簡稱MR)才可以進行代碼更新。
個人遠程倉庫ORIGIN:由MAIN fork而來,位於服務器上個人項目下。
本地倉庫LOCAL:由開發人員從ORIGIN clone而來,位於本地,用於代碼開發。后續通過pull/push操作保持LOCAL與ORIGIN的同步。同時,在LOCAL中設置upstream為MAIN,然后通過fetch upstream來獲取MAIN的代碼。
2. 協作流程
(1) 開發流程
Master新建代碼主倉庫MAIN、添加項目成員。
Developer從主倉庫fork一份到自己的個人遠程倉庫ORIGIN。
Developer從個人遠程倉庫clone代碼到本地,建立本地倉庫,同時將主倉庫MAIN設置為本地倉庫LOCAL的upstream
在本地倉庫進行開發,需要提交代碼時,按照如下步驟:
a) Commit:提交代碼到本地倉庫
b) Fetch:獲取主倉庫的更新,同步到個人本地倉庫
c) Merge:合並主倉庫的代碼和本地的開發代碼。代碼會自動合並,但如果有沖突,需手動合並代碼解決沖突
d) Push:提交代碼到個人遠程倉庫
e) Merge Request:在GitLab的個人主頁,發起Merge Request請求將個人遠程倉庫代碼合並到主倉庫的對應分支
5. Master處理Merge Request請求,進行code review。如果一切正常,最終合並到主倉庫,打Tag上線。如果有問題,則拒絕Merge Request,要求修改。
(2) Bug修復流程
假設是tag v1.0的代碼上出現bug需要緊急修復,協作流程如下。
Master合並主倉庫的master分支的v0.1至hotfix分支。
Developer成員拉取主倉庫的hotfix分支,按照代碼開發的步驟4進行開發。修復完成后提交代碼並發起merge request,請求合並個人遠程倉庫的hotfix分支至主倉庫的hotfix分支
Master成員處理Merge Request請求,進行code review,最終合並hotfix分支至master分支
(3) 命令及操作參考
1. Clone代碼到本地
git clone git@gitlab.aa.com.cn:012829/test.git
2. Commit
## Commit message需要注意規范,詳見下一節
git commit –am “#XYPJ-1111# message example”
3. Fetch同步主倉庫與個人遠程倉庫,對應(1)小節中第4步
## 建立本地倉庫時,設置本地倉庫的upstream為主倉庫
git remote add upstream git@gitlab.aa.com.cn:cams/test.git
## 查看remote信息
git remote –v
## 結果類似如下:
origin git@gitlab.aa.com.cn:012829/test.git (fetch)
origin git@gitlab.aa.com.cn:012829/test.git (push)
upstream git@gitlab.aa.com.cn:cams/test.git (fetch)
upstream git@gitlab.aa.com.cn:cams/test.git (push)
## 之后代碼開發時的操作
## fetch主倉庫代碼到本地(只是獲取,還未合並)
git fetch upstream
##本地代碼切換到master分支(如果已經在master分支就跳過這一步),然后合並主倉庫的master分支到本地的master分支
git checkout master
git merge upstream/master
## 提到代碼到個人遠程倉庫
git push origin master
## 注意:如果是bug修復,則以上fetch/merge/push都是hotfix分支
4. Merge Request
登錄GitLab,在個人項目主頁中,發起Merge Request。如下圖所示,表示要將個人倉庫012829/test的master分支的代碼合並到主倉庫cams/test的master分支。
如果發起MR時發現有報代碼沖突,則可以自己關閉MR,按照上一步的操作解決沖突合並代碼后,重新發起MR。
5. 分支管理
詳見附錄3《分支管理》
3. 相關規范
(1) commit規范
代碼commit時必須帶上正確的commit message和正確的author
commit message必須是“#XYPJ-2199# corrent commit message example”格式,與之前SVN代碼提交時一樣。
git commit –m “#XYPJ-1234# this is the correct commit message”
Author必須是K開頭的或者0開頭的,務必設置git的user.name為工號(git config --global user.name "012829")
詳見:http://wiki.aa.com.cn/pages/viewpage.action?pageId=22275447
如果commit message或者author不正確,會出現無法push到遠程倉庫的錯誤。出現這種情況時,用如下方法修改最近一次commit
##修改最近一次commit的author
git commit --amend --author="012829<wangbin012829@htsc.com>"
##修改最近一次commit的commit message
git commit --amend -m "#XYPJ-2179#初始化SV代碼倉庫"
當前commit規范可以由git hook強制實施,但是其他流程目前無自動化的強制措施,需要開發人員在開發中形成習慣。
(2) 代碼合並
注意與主倉庫的同步,保持一定的fetch頻率。防止出現長時間不同步而沖突嚴重的情況。
如果發起MR時發現有沖突,可自己撤回手動解決沖突后再重新發起。
向主倉庫發起MR不要過於頻繁,一般以JIRA中一個任務為單位,任務完成提交代碼並向主倉庫發起MR
(3) 分支管理
在個人倉庫和本地倉庫開發時,可以也鼓勵多使用git的分支功能來管理代碼,但為了保持主倉庫的整潔,主倉庫不會有多余的分支。因此個人開發的功能必須先合並到個人倉庫的master分支(處理bug時是hotfix分支),然后再發起MR。
4. 附錄:參考資料
《Git基本教程》:https://www.liaoxuefeng.com/wiki/0013739516305929606dd18361248578c67b8067c8c017b000
《Git常用命令》:http://www.ruanyifeng.com/blog/2015/12/git-cheat-sheet.html
尤其要重視分支和遠程倉庫這兩個概念
《分支管理》:http://www.ruanyifeng.com/blog/2012/07/git.html
《遠程倉庫操作》:http://www.ruanyifeng.com/blog/2014/06/git_remote.html
————————————————
版權聲明:本文為CSDN博主「ruanhao1203」的原創文章,遵循CC 4.0 BY-SA版權協議,轉載請附上原文出處鏈接及本聲明。
原文鏈接:https://blog.csdn.net/ruanhao1203/article/details/80440824