基于GitLab的Code Review教程或指南

一、前言

1、本文主要內(nèi)容

  • GitLab Code Review機制說明
  • Git Workflow 與 Git Code Review Workflow
  • GitLab Code Review 配置說明
  • GitLab Code Review 流程演示
  • GitLab For IDE 插件介紹(JetBrains等等)

2、GitLab Code Review機制

GitLab可以在分支合并的時候支持兩種方式:

  1. 在本地將源分支(Source branch)代碼合并到目標分支(Target branch)然后Push到目標分支(Target branch)
  2. 將源分支(Source branch)Push到遠端,然后在GitLab指定目標分支(Target branch)發(fā)起Merge Request,對目標分支(Target branch)擁有Push權(quán)限的用戶執(zhí)行Merge操作,完成合并。

也就是說,使用GitLab進行Code Review就是在分支合并環(huán)節(jié)發(fā)起Merge Request,然后Code Review完成后將代碼合并到目標分支。

3、本教程適用環(huán)境信息

工具/環(huán)境 版本
GitLab GitLab.com、GitLab 社區(qū)版皆可
IDE JetBrains(IntelliJ IDEA、PyCharm、PhpStorm、WebStorm、RubyMide、AppCode、CLion、GoLand、DataGrip、Rider、Android Studio等等)

雖然Code Review不一定非要結(jié)合IDE來做,但是也不得不感謝JetBrains開發(fā)了幾乎覆蓋所有主流編程語言的IDE

JetBrains Tools目前覆蓋的主流語言有:C/C++、C#、DSL、F#、Go、Groovy、Java、JavaScript、TypeScript、Kotlin、Objective-C、PHP、Python、Ruby、Scala、SQL、Swift、VB.NET(排名不分先后)

二、GitLab Code Review 配置

1、Code Review 工作流

  • 通用Git工作流說明
image
  1. 需求確認后,從master創(chuàng)建develop分支
  2. 開發(fā)人員從develop分支創(chuàng)建自己的feature分支進行開發(fā)
  3. master分支發(fā)生變更,需要從master分支合并到develop分支、可以考慮定期合并一次
  4. feature分支合并到對應的develop分支之前,需要從develop分支合并到feature分支
  5. feature分支合并到對應的develop分支之后,發(fā)布到測試環(huán)境進行測試
  6. develop分支在測試環(huán)境測試通過之后,合并到release分支并發(fā)布到預發(fā)布環(huán)境進行測試
  7. release分支在預發(fā)布環(huán)境驗證通過后,合并到master分支并發(fā)布到生產(chǎn)環(huán)境進行驗證

分支名稱約定:

分支類型 名稱格式 說明
Master master 有且只有一個
Release release-* *可以是班車發(fā)布日期也可以是需求名稱縮寫,也可以根據(jù)需要只用一個release分支
Develop develop-* *通常是班車發(fā)布日期或者需求名稱縮寫
Feature feature-{username}-* 開發(fā)人員個人分支
  • Code Review 環(huán)節(jié)選定

以上述Git工作流為例,開發(fā)人員在Feature分支進行開發(fā),開發(fā)完成后Merge到Develop分支進行測試。

那么最適合做Code Review就是Feature分支合并到Develop分的環(huán)節(jié)。

image

2、GitLab Repository 配置

GitLab倉庫相關(guān)配置以gitlab.com為例,本篇內(nèi)容如果沒有特別注明,也同樣適用于私有化部署的GitLab CE版本

  • GitLab新建倉庫&創(chuàng)建分支
image

倉庫地址:https://gitlab.com/ken-io/test

image

新建分支:
release(from master)
develop-test(from master)、
feature-ken-test(from develop-test)

  • Protected Branches 配置

為了保證必須以Merge的方式變更develop分支、release分支、以及master分支,我們需要對Push以及Merge權(quán)限進行限制

菜單:Settings->Repository Settings然后展開Protected Branches選項
https://gitlab.com/ken-io/test/settings/repository

gitlab-codereview-settings-protected-branches.png

這里,我們限制分支,所有的開發(fā)人員對develop分支、release分支、以及master分支均無Push權(quán)限,只能以Merge方式合并到對應分支,而且只有Maintainers(Masters)組的用戶有Merge權(quán)限。

對于通配符的分支保護,我們需要給Maintainers(Masters)組的用戶Push權(quán)限,不然無法新建對應格式的分支。對于固定名稱的分支:master、release,可以限制所有角色都沒有Push權(quán)限。

三、GitLab Code Review 示例

  • 變更Feature分支

在線修改feature-ken-test分支README.md文件,為Merge Request提供基礎

image

這里隨意更新一行內(nèi)容,然后Commit changes即可。

  • 創(chuàng)建Merge Request

菜單:Merge Requests,然后點擊:New Merge Request

image

Source branch選擇:feature-ken-test
Target branch選擇:develop-test
然后:Compare branches and continue

image

操作項/填寫項說明:

操作項/填寫項 ken.io 的說明
Title 標題,沒有特殊要求保持默認即可
Description 描述,需要將變更的需求描述清楚,最好附件Code Review要點
Assignee 分配到的人,被分配到的人將會收到郵件通知,跟Merge權(quán)限沒有必然關(guān)系,仍然是項目的Maintainers(Masters)角色擁有Merge權(quán)限
Milestone 里程碑,如果沒有可不選
Label 標簽,如果沒有可不選
Approvers user 批準人/審批人,必須為項目所在組成員,如果選擇了批準人,那此次合并必須經(jīng)由批準人批準
Approvers group 批準人組,方便同時選擇多個批準人
Approvals required 最少批準個數(shù),如果選了個3個批準人,Approvals required設置為1,那么只需要1個批準人批準即可
Source branch 源分支,跟上一步驟選擇一致,這里主要用于確認
Target branch 目標分支,跟上一步驟選擇一致,這里主要用于確認

Approvers選項暫不適用于Gitlab的最新穩(wěn)定版(11.1.4),期望后續(xù)可以支持。
這里填寫好Description,選擇Assignee,然后Submit merge request即可。

  • Merge Request 操作

[站外圖片上傳中...(image-3f6069-1536737759058)]

Merge Request 創(chuàng)建之后就會轉(zhuǎn)到該頁面,被分配到的人(Assignee)會收到郵件提醒,如果需要多個人進行 Code Review,只要將該頁面的鏈接發(fā)給其他項目成員即可。項目成員可以查看變更并評論,只不過按照之前的配置,只有Maintainers(Masters)角色的成員才有Merge的權(quán)限。

image

在Changes選項卡中,我們可以看到所有的變更。將光標移動到行號處會出現(xiàn)評論按鈕,我們可以點擊評論按鈕發(fā)起評論,這個評論是對項目成員可見的,大家可在討論區(qū)進行討論。最終討論發(fā)起者有權(quán)將討論標記為已解決resolved

image

當所有的問題已解決之后(如果選擇了審批人也需要審批通過),Maintainers(Masters)成員點擊Merge完成合并即可。

image

Merge完成之后,可以選擇Remove Source Branch等操作。

develop分支合并到release分支,以及elease分支合并到master是不需要經(jīng)過Code Review的,直接Merge即可。這里就省略了。

四、IDE Merge Request 插件使用介紹

前面介紹了通過GitLab網(wǎng)頁創(chuàng)建Merge Request并發(fā)起Code Review,但作為開發(fā)人員,還是結(jié)合IDE來使用會更順手,GitLab提供了相關(guān)的api,只要我們創(chuàng)建響應的token,就可以供IDE插件來訪問GitLab,以便使用IDE代替在網(wǎng)頁上操作。

1、GitLab Access Token

菜單:User Settings->
Access Tokens 進入Access Token添加頁面

image
說明
Name 名稱,根據(jù)自己喜好來即可
Expires at 過期時間,最遠可以選擇到10年后,根據(jù)自己需要填寫即可
Scopes 范圍,這里選擇api就夠用了

創(chuàng)建完成后,麻煩暫時保存token。因為一旦刷新或者重開頁面,token就不可見了。

2、JetBrains IDE GitLab插件使用

JetBrains提供了諸多IDE:IntelliJ IDEA、PyCharm、PhpStorm、WebStorm、RubyMide、AppCode、CLion、GoLand、DataGrip、Rider、Android Studio等等,如無意外,都適用GitLab插件。

安裝以下兩個插件即可:
Gitlab Projects:https://plugins.jetbrains.com/plugin/7975-gitlab-projects
Gitlab Integration:https://plugins.jetbrains.com/plugin/7319-gitlab-integration

  • 安裝GitLab插件

Settings->Plugins 進入Plugins管理頁

image

點擊Browse repositories并搜索gitlab

image

安裝Gitlab Projects以及Gitlab Integration,然后重啟IDE生效

  • 配置GitLab

在Settings界面搜索GitLab Settings

image

填寫GitLab Server Url、Access Token,然后點擊Add New One完成添加
如果是私有化部署的GitLab,換成對面的域名或者IP+Port即可

  • Create Merge Request

Clone項目feature-ken-test分支到本地,變更后push到origin。
然后在菜單中選擇:VCS->Git->Git Lab-> Create Merge Request

image

這里相當于我們在GitLab網(wǎng)頁上進行創(chuàng)建操作,只不過少了一些選項,也暫不支持Approvers相關(guān)選項。
選擇目標分支,被分配的人,填寫好Title、Description然后點擊OK即可。
Merge Request創(chuàng)建完成后,插件會在右下角提示,點擊鏈接即可跳轉(zhuǎn)到Merge Request頁面

如果提示沖突,請先將目標分支代碼合并到當前分支

  • Merge Request Manage

項目成員在菜單中選擇:VCS->Git->Git Lab-> List Merge Request

image

在這里可以看到待處理的Merge Request,選中后點擊Code Review就可以呼出Merge Request操作面板

image
按鈕 說明
Diff 查看所有變更文件及差異
Comments 查看、添加評論
Assign to me 將跟進人指給自己
Merge 執(zhí)行Merge
  • Merge Request Diff

Diff界面說明:

image

左側(cè)是本次合并的commit記錄,右側(cè)是本次合并的文件。雙擊對應文件即可查看差異明細

image
  • Merge Request Comments
image

Comments界面可以查看指定Merge Reuqest評論信息,也可以添加評論,雙擊可以查看完整評論內(nèi)容。
但是不支持針對代碼行發(fā)起討論、對討論標記為已解決等。


GitLab插件還是更適用于Create Merge Request、或者對于較為簡單的提交進行Code Review。如果需要討論等功能,還是建議在GitLab頁面上進行操作

3、其他IDE GitLab插件使用

  • Visual Studio

Visual Studio GitLab插件:https://marketplace.visualstudio.com/items?itemName=MysticBoy.GitLabExtensionforVisualStudio

  • Visual Studio Code

Visual Studio Code GitLab插件:https://marketplace.visualstudio.com/items?itemName=jasonn-porch.gitlab-mr

  • Atom

Atom GitLab 插件:https://atom.io/packages/gitlab

五、備注

  • 延伸閱讀

GitLab安裝部署教程:https://ken.io/note/centos7-gitlab-install-tutorial


本文首發(fā)于我的獨立博客:https://ken.io/note/gitlab-code-review-tutorial

最后編輯于
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請聯(lián)系作者
【社區(qū)內(nèi)容提示】社區(qū)部分內(nèi)容疑似由AI輔助生成,瀏覽時請結(jié)合常識與多方信息審慎甄別。
平臺聲明:文章內(nèi)容(如有圖片或視頻亦包括在內(nèi))由作者上傳并發(fā)布,文章內(nèi)容僅代表作者本人觀點,簡書系信息發(fā)布平臺,僅提供信息存儲服務。

相關(guān)閱讀更多精彩內(nèi)容

  • Spring Cloud為開發(fā)人員提供了快速構(gòu)建分布式系統(tǒng)中一些常見模式的工具(例如配置管理,服務發(fā)現(xiàn),斷路器,智...
    卡卡羅2017閱讀 136,688評論 19 139
  • GitLab 是一個基于 git 的倉庫管理程序,也是一個方便軟件開發(fā)的強大完整應用。 GitLab 擁有一個“用...
    weihongyu12閱讀 21,248評論 2 26
  • 今天我閱讀了《精靈鼠小弟》這本書。 第三天白天,中介小哥來幫忙,陪著我聽老鼠。。。。 他的什么黏鼠板,老鼠籠的主義...
    燕麥雪里藏閱讀 240評論 0 0
  • 生活總是這個熊樣子 千溝萬壑里沒有想要的詩 遇到?jīng)]有外殼的愛情總會被腐蝕 離開了熱鬧的大都市 離開了我灰頭土臉的現(xiàn)...
    字丁一閱讀 197評論 0 1
  • 如果可以 我愿意 一路行攝 一路書寫 腳步莫匆匆 不要辜負這座城市難得的一片藍 據(jù)說去年這個時候這座城市可不這樣 ...
    漫漫無憂閱讀 204評論 8 5

友情鏈接更多精彩內(nèi)容