跳到主要内容

如何使用 CodeOwners 功能

在做日常迭代交付时提交的 PR,指定组内成员进行代码评审,当代码变更涉及到某文件或目录 A 时,大多数情况下会指派固定的人员 B 进行代码评审。我们就可以称为 B 是 组件 A 的 CodeOwner。简单来说,Codeowner 用来定义谁负责仓库中的特定文件或目录。

想要使用 CodeOwner 功能,需要在仓库中指定的位置创建一个名为CODEOWNERS文件,它们仅适用于当前分支,指定的位置为:

  • 在仓库的根目录中
  • .gitee/目录中
  • docs/目录中

CODEOWNERS 文件案例

# Code Owners for a file
filename @username1 @username2

# Code Owners for a directory
# You can also use email addresses if you prefer.
directoryname/ @username1 408815583@qq.com

# 正则匹配
*.rb @liwen

# The `docs/*` pattern will match files like
# `docs/getting-started.md` but not further nested files like
# `docs/build-app/troubleshooting.md`.
docs/* docs@example.com

# In this example, @octocat owns any file in an apps directory
# anywhere in your repository.
apps/ @octocat

当文件匹配文件中的多个CODEOWNERS规则时,将使用匹配文件的最后一个模式中的用户。例如:

README.md @user1

# This line would also match the file README.md
*.md @user2

README.md的代码所有者是@user2,每个文件路径只能匹配一个CODEOWNERS规则。

语法转义

  • 使用 \ 对以 # 开头的模式转义,使其被当作模式而不是注释;
  • 使用 [ ] 定义分组范围,分组使用方法如下:
[Documentation]
ee/docs/ @docs
docs/ @docs

[Database]
README.md @database
model/db/ @database

[DOCUMENTATION]
README.md @docs

可以将某个部分设为可选,以便该部分中的代码审核的批准是可选的。 在代码所有者部分名称之前放置一个插入字符^。例如:

^[Documentation]
*.md @ligen @liqin

[Config]
*.yml @liwen @normalcoder

/app/models @xxx @xxx2

CodeOwner 指派规则

  • 指定的 Codeowner 可以是 @用户名 或 指定邮箱地址
  • 当指定的用户不存于平台,或不存在于仓库的开发者以上角色,不会指派对应用户,且不提供具体提示为什么没指派
  • 指派名单范围仅限于仓库成员名单,企业版超管、管理员与组织管理员不包含在内。
  • CODEOWNER 归属只认最后一条规则
  • CODEOWNER 指派不允许任何人移除,跟随 CODEOWNERS 文件更新而更新
  • CODEOWNERS 加指派:相关 PR 加对应的 CODEOWNER,并添加指派日志(推送人指派了 CODEOWNER XXXX)
  • CODEOWNERS 减指派:相关 PR 更新不移除指派,并添加指派日志(推送人移除了 XXXX 的 CODEOWNER 身份)