Git設置分支保護實現CodeReview卡點
From:https://blog.csdn.net/crisschan/article/details/100922668
GIT是一個分佈式版本控制系統的軟件,主要用來控制代碼的版本。所謂分佈式也就是每一個git的客戶端都有一份完成的代碼庫,這樣如果中央服務器出現問題,代碼也會在各個開發者的電腦上有備份。(本文以下內容以GitLab爲例)
GitFlow 模式將代碼和環境對應
[外鏈圖片轉存失敗(img-kccgQ5lw-1568695938834)(https://i.loli.net/2019/09/17/TVxgaeYwQN2rMf9.png)]
GitFlow模式的各分支說明
- 1) master
- 主分支 , 產品的功能全部實現後 , 最終在master分支對外發布
- 該分支爲只讀唯一分支 , 只能從其他分支(release/hotfix)合併 , 不能在此分支修改
- 另外所有在master分支的推送應該打標籤做記錄,方便追溯
- 例如release合併到master , 或hotfix合併到master
- 2) develop
- 主開發分支 , 基於master分支克隆
- 包含所有要發佈到下一個release的代碼
- 該分支爲只讀唯一分支 , 只能從其他分支合併
- feature功能分支完成 , 合併到develop(不推送)
- develop拉取release分支 , 提測
- release/hotfix 分支上線完畢 , 合併到develop並推送
- 3) feature
- 功能開發分支 , 基於develop分支克隆 , 主要用於新需求新功能的開發
- 功能開發完畢後合到develop分支(未正式上線之前不推送到遠程中央倉庫
- feature分支可同時存在多個 , 用於團隊中多個功能同時開發 , 屬於臨時分支 , 功能完成後可選刪除
- 4) release
- 測試分支 , 基於feature分支合併到develop之後 , 從develop分支克隆
- 主要用於提交給測試人員進行功能測試 , 測試過程中發現的BUG在本分支進行修復 , 修復完成上線後合併到develop/master分支並推送(完成功能) , 打Tag
- 屬於臨時分支 , 功能上線後可選刪除
- 5) hotfix
- 補丁分支 , 基於master分支克隆 , 主要用於對線上的版本進行BUG修復
- 修復完畢後合併到develop/master分支並推送 , 打Tag
- 屬於臨時分支 , 補丁修復上線後可選刪除
- 所有hotfix分支的修改會進入到下一個release
GitFlow 主要的工作流程
代碼倉庫的Owner設置master分支是保護分支,
- 1) 有新的feature要開發的時候,首先從master拉取第一個develop分支,develop分支名就是dev。
- 2) 從dev拉取feature分支進行編碼開發(多個開發人員拉取多個feature同時進行並行開發 , 互不影響),feature分支命名規範:feature- XX(XX是一個唯一標示)
- 3) feature分支完成後 , 合併到dev,合併後擇刪除當前feature。
- 4) 從dev拉取release分支進行提測 , 提測過程中在release分支上修改BUG,release分支名字是release。
- 5) release分支上線後 , 合併release分支到dev/master並推送合併之後刪除當前release分支。
- 6) 上線之後若發現線上BUG , 從master拉取hotfix進行BUG修改。hotfix 分支命名規範:hotfix-XXX(XXX是一個唯一標示)。
- 7) hotfix通過測試上線後 , 合併hotfix分支到dev/master並推送,合併之後 , 刪除當前hostfix
- 8) 當進行一個feature時 , 若dev分支有變動 , 如其他開發人員完成功能並上線 , 則需要將完成的功能合併到自己分支上即合併dev到當前feature分支。
- 9) 當進行一個release分支時 , 若dev分支有變動 , 如其他開發人員完成功能並上線 , 則需要將完成的功能合併到自己分支上即合併dev到當前release分支 (因爲當前release分支通過測試後會發佈到線上 , 如果不合並最新的dev分支 , 就會發生丟代碼的情況)。
Git的分子保護
[外鏈圖片轉存失敗(img-CfzADDYw-1568695938859)(https://i.loli.net/2019/09/17/4wPgvOm72Q9zT8K.png)]
在Git的分支合併過程中支持方式,一種是在本地將source branch 合併到 target branch,然後再切換到target branch後將target branch push到遠端target branch。另外一種是將本地的source branch push到遠端的source branch,然後在gitlab上提交一個將source branch 合併到 target branch的merge request。那麼爲了能夠到達我們強制的CodeReview卡點,我們將master branch(也就是生產發佈分支)、release branch(也就是提測分支)進行保護,不能接受直接的push request,只能通過提交merge request,並有架構師或者技術負責人進行CodeReview通過後,完成Merge。那麼如何完成Git的分支保護呢?
首先進入對應的代碼倉,然後點擊Settings下的Repository Settings選擇Protected Branches選項
[外鏈圖片轉存失敗(img-VgWWlWh1-1568695938870)(https://i.loli.net/2019/09/17/WtGv1JycYg6PRxo.png)]
選擇對應的分支分別作如下設置:
限制了develop分支,develop分支、release分支、以及master分支只能通過merge request的方式合併,不可以直接的push代碼,同時設置了需要Master進行合併的請求的code review後點擊完成後完成合並。(這裏面的Master就是開發架構師或者技術負責人等角色)
提交一個Merge Request
點擊merge requst菜單,然後新建一個merge request
[外鏈圖片轉存失敗(img-8ny2Y1VP-1568695938875)(https://i.loli.net/2019/09/17/jWgx1k4VF89UqQt.png)]
然後選擇對應的source branch和target branch後,點擊下一步:
[外鏈圖片轉存失敗(img-sjlwYYtQ-1568695938880)(https://i.loli.net/2019/09/17/caKZCW52pLyX8kr.png)]
進入後輸入相關內容後,點擊提交合並請求:
[外鏈圖片轉存失敗(img-nIi7WDl1-1568695938881)(https://i.loli.net/2019/09/17/Jr698w4GeMaXysZ.png)]
[外鏈圖片轉存失敗(img-81SfDzqW-1568695938887)(https://i.loli.net/2019/09/17/PHUiSv247zWuNJR.png)]
其中(出去如下部分以外都選擇默認值或者爲空):
操作項 | 說明 |
---|---|
Title | 標題 |
Description | 描述寫清具體包含的feature |
Assignee | 分配到的人必須爲項目內的技術負責人或者架構師 |
Milestone | no milestone |
Label | no label |
完成後,就等待code review過後等待反饋意見。通過後就可以完成合並了。
IDE:Intelj的codereview插件
1、GitLab Access Token菜單:User Settings->Access Tokens 進入Access Token添加頁面
Name 名稱,根據自己喜好來即可Expires at 過期時間,最遠可以選擇到10年後,根據自己需要填寫即可Scopes 範圍,這裏選擇api就夠用了創建完成後,麻煩暫時保存token。因爲一旦刷新或者重開頁面,token就不可見了。
2、IntelliJ IDEA GitLab插件使用安裝以下兩個插件即可:
Gitlab Projects:https://plugins.jetbrains.com/plugin/7975-gitlab-projectsGitlab Integration:https://plugins.jetbrains.com/plugin/7319-gitlab-integration
3、Visual StudioVisual Studio GitLab插件:https://marketplace.visualstudio.com/items?itemName=MysticBoy.GitLabExtensionforVisualStudio
4、Visual Studio CodeVisual Studio Code GitLab插件:https://marketplace.visualstudio.com/items?itemName=jasonn-porch.gitlab-mr
5、AtomAtom GitLab 插件:https://atom.io/packages/gitlab
關注我,關注測試