codecamp

GitHub 管理团队的代码审查分配

代码审查分配明确指出哪些团队成员应为拉取请求提交审查。

代码审查任务可用于 GitHub Team 和 GitHub Enterprise Cloud。 更多信息请参阅“GitHub's products”。

团队维护员和组织所有者可以配置代码审查分配。

关于代码审查分配

通过使用代码审查分配,每当请求您的团队审查拉取请求时,团队将作为审查者被删除,并将一部分指定的团队成员分配到团队的位置。 代码审查分配允许您决定在请求团队审查时是通知整个团队,还是只通知一部分团队成员。

当自动请求代码所有者进行审查时,团队也会被删除,并替换为个人。 单个审批不符合受保护分支中代码所有者审批的要求。 更多信息请参阅“关于代码所有者”。

路由算法

代码审查分配根据两种可能的算法之一自动选择和分配审查者。

循环算法根据最近收到最少审查请求的人员选择审查者,侧重于在团队所有成员之间的轮替,而不管他们目前拥有多少未完成的审查。

负载平衡算法根据每个成员最近的审查请求总数选择审查者,并考虑每个成员未完成的审查数。 负载平衡算法努力确保每个团队成员在任意 30 天内审查相同数量的拉取请求。

配置代码审查分配

  1. 在 GitHub 的右上角,单击您的个人资料照片,然后单击 Your profile(您的个人资料)

个人资料照片

  1. 在您的个人资料页面左侧的“Organizations(组织)”下,单击组织的图标。

组织图标

  1. 在组织名称下,单击 teamTeams(团队)

团队选项卡

  1. 在 Teams(团队)选项卡上,单击团队名称。

组织的团队列表

  1. 在团队页面顶部,单击 settingSettings(设置)

团队设置选项卡

  1. 在左侧边栏中,单击 Code review assignment(代码审查分配)

代码审查分配按钮

  1. 选择 Enable auto assignment(启用自动分配)

代码审查分配按钮

  1. 在“How many team members should be assigned to review?(应分配多少团队成员进行审查?)”下,使用下拉菜单选择多个要分配给每个拉取请求的审查者。

审查者人数下拉列表

  1. 在“Routing algorithm(路由算法)”下,使用下拉菜单选择要使用的算法。 更多信息请参阅“路由算法”。

路由算法下拉列表

  1. (可选)要始终跳过某些团队成员,请选择 Never assign certain team members(永不分配某些团队成员)。 然后,选择要始终跳过的一个或多个团队成员。

永不分配某些团队成员复选框和下拉列表

  1. (可选)要对每个拉取请求审查只通知代码审查分配所选择的团队成员,在“Notifications(通知)”下选择 If assigning team members, don't notify the entire team(如果分配团队成员,请不要通知整个团队)

代码审查分配通知

  1. 单击 Save changes(保存更改)

禁用代码审查分配

  1. 在 GitHub 的右上角,单击您的个人资料照片,然后单击 Your profile(您的个人资料)

个人资料照片

  1. 在您的个人资料页面左侧的“Organizations(组织)”下,单击组织的图标。

组织图标

  1. 在组织名称下,单击 teamTeams(团队)

团队选项卡

  1. 在 Teams(团队)选项卡上,单击团队名称。

组织的团队列表

  1. 在团队页面顶部,单击 settingSettings(设置)

团队设置选项卡

  1. 选择 Enable auto assignment(启用自动分配)以删除复选标记。

代码审查分配按钮

  1. 单击 Save changes(保存更改)
GitHub 添加组织成员到团队
GitHub 重命名团队
温馨提示
下载编程狮App,免费阅读超1000+编程语言教程
取消
确定
目录

GitHub 身份验证

在 GitHub 上管理订阅和通知

在 GitHub 上管理活动的订阅

GitHub 组织和团队

GitHub 管理对组织仓库的 Git 访问

GitHub 计费和付款

GitHub 使用议题和拉取请求进行协作

GitHub 在具有代码质量功能的仓库上进行协作

管理在 GitHub 上的工作

GitHub 建立强大的社区

GitHub 管理仓库

GitHub 自定义 GitHub 工作流程

在 GitHub Marketplace 中购买并安装应用程序

通过 GitHub Jobs 寻找人才

关闭

MIP.setData({ 'pageTheme' : getCookie('pageTheme') || {'day':true, 'night':false}, 'pageFontSize' : getCookie('pageFontSize') || 20 }); MIP.watch('pageTheme', function(newValue){ setCookie('pageTheme', JSON.stringify(newValue)) }); MIP.watch('pageFontSize', function(newValue){ setCookie('pageFontSize', newValue) }); function setCookie(name, value){ var days = 1; var exp = new Date(); exp.setTime(exp.getTime() + days*24*60*60*1000); document.cookie = name + '=' + value + ';expires=' + exp.toUTCString(); } function getCookie(name){ var reg = new RegExp('(^| )' + name + '=([^;]*)(;|$)'); return document.cookie.match(reg) ? JSON.parse(document.cookie.match(reg)[2]) : null; }