# OWNERS 介绍

您可以使用 OWNERS 文件定义仓库不同路径下的文件所有者,从而在 CR 过程中确保变更获得可信赖的审阅。

注意:一旦有任意分支开启了 OWNERS 评审,则对默认分支的代码推送、合入都会触发对 OWNERS 文件内容的检查,如果仓库内有 OWNERS文件,且使用的不是工蜂的 OWNERS 机制,建议所有分支规则都关闭 OWNERS 评审,以避免因为内容不符合规则而被拦截。

# OWNERS 机制

# 位置

  • OWNERS 配置以默认分支为准,更新 OWNERS 配置需更新默认分支的OWNERS文件,更新其他分支无效
  • OWNERS 文件可放置在任意目录,每个OWNERS文件可配置其根目录及所有子目录的文件所有者

# 语法

注意:OWNERS 文件需使用 UTF-8 编码且使用 linux 换行符

# 基础语法:[ <user_name> | * | set noparent ]
  • 作用域:OWNERS 文件所在目录及所有子目录的文件

    • <user_name>:文件所有者,user_name 为用户的 rtx,多个用户需换行或者使用英文逗号分隔

        # use `<user_name>` format, set users for current dir
        git_helper_01
        git_helper_02
        git_helper_03,git_helper_04
      
    • *:不需要有 文件所有者,OWNERS 机制下默认所有文件都需要 文件所有者,如有文件不需要,需用此声明

        # use `*` format, ignore all file owners for current dir
        *
      
    • set noparent:继承禁用,OWNERS 文件默认存在继承关系,如需避免上层目录 OWNERS 文件的影响,需用此声明,且单独一行

        # use `set noparent` format, ignore inherit rules
        set noparent
      
# 高级语法:per-file <file_name> = [ <user_name> | set noparent | * ]
  • 作用域:只对 OWNERS 文件所在目录的指定文件生效,通过<file_name>指定生效文件名规则,支持通配符"\*"和"?",但不能包含"/"

    • per-file:指对指定规则的文件集进行单独设定

        # use <per-file> format, set rules for special files
      
        # ----------------------------------------------------------------------------------------
        # <user_name> : 命中<file_name>的文件的 文件所有者 ,user_name为用户的rtx
        per-file *.java = git_helper_01,git_helper_02
      
        # ----------------------------------------------------------------------------------------
        # set noparent:命中per-file的文件不继承基础语法的<user_name>及上层目录OWNERS文件的<user_name>,此配置需单独使用一行
        per-file *.java = set noparent
      
        # ----------------------------------------------------------------------------------------
        # * : 命中per-file的文件不需要有 文件所有者 ,需用此声明
        per-file *.md = *
      

# OWNERS 评审

OWNERS文件作为 CR 的文件评审配置,所有 CR 的文件都经过 OWNERS 评审,整体的 CR 单才会通过。

# 启用 OWNERS 评审

注意:启用后,.code.yml 的file模块将不再生效。

注意:启用后,存在 OWNERS 配置的文件需进行文件评审(默认需要一个 OWNER 评审通过),如要求整个项目都进行 OWNERS 评审,可在根目录添加 OWNERS 文件。对于没有代码查看权限的评审人会被自动过滤掉。

  1. 进入设置/分支规则 (含保护分支) ,选择非保护分支评审规则或编辑保护分支规则组
  2. 评审规则点击勾选"对文件启用 OWNERS 评审"

image-20220208181354716

# OWNERS 评审规则示例

# 配置文件夹的评审人
  • 基础语法:<user_name>

例子,如 /apps/OWNERS 内容为

git_helper_01
git_helper_02

则 git_helper_01 和 git_helper_02 可作为 /apps/... 内所有文件的文件评审人,如 /apps/build.java 和 /apps/main/test.go

# 剔除不需要评审的文件夹
  • 基础语法: *

例子,如 /apps/OWNERS 内容为

*

则 /apps/... 都不需要文件评审,如 /apps/build.java 和 /apps/main/test.go

# 禁止继承的 OWNER 作为评审人

  • 基础语法:set noparent

例子,如 /apps/OWNERS 内容为

git_helper_01

而 /apps/main/OWNERS 内容为

git_helper_02
set noparent

则仅 git_helper_02 可作为 /apps/main/test.go 的文件评审人

# 配置指定文件的评审人

  • 高级语法:per-file <file_name> = <user_name>

例子,如 /apps/OWNERS 内容为

per-file *.java = git_helper_01
per-file *.go = git_helper_02

则 git_helper_01 可作为 /apps/build.java 的文件评审人,git_helper_02 可 作为 /apps/test.go 的文件评审人

# 禁止继承的 OWNER 作为指定文件的评审人

  • 高级语法:per-file <file_name> = set noparent

例子,如 /apps/OWNERS 内容为

git_helper_02
per-file *.java = git_helper_03
per-file *.java = set noparent

则仅 git_helper_03 可作为 /apps/build.java 的文件评审人

# 剔除不需要评审的文件

高级语法:per-file <file_name> = *

例子,如 /apps/OWNERS 内容为

per-file *.java = *

则 /apps/build.java 不需要文件评审,而 /apps/test.go 需要文件评审

# 进行 OWNERS 评审

启用后,创建 CR 会根据 OWNERS 配置生成文件评审规则并默认载入推荐的 OWNER 作为评审人

# 添加评审人

如无可用 OWNER,则需先更新默认分支的OWNERS 配置,再进行添加。

  • 编辑评审人->打开 OWNERS 过滤器->选择查找文件范围,获取到文件的有效 OWNER 合集。

image-20220208181354716

  • 选择需要的 OWNER 添加为为评审人。(也可通过<user_name>直接添加)

image-20220208181354716

# 删除评审人

要给相应文件 移除对应的 OWNERS 评审人,需在 CR 的评审人/必要评审人中添加/移除,不支持只给单个文件添加/移除。

image-20220208181354716

# 通过/拒绝评审

要通过/拒绝相应文件的 OWNERS 评审,需在通过/拒绝 整个 CR,不支持通过/拒绝单个文件。

image-20220208181354716

# 重置评审规则

OWNERS 评审规则 在 CR 创建后不可变更,仅在 CR 出现commit 更新重新打开时(这两种情况视为重新创建了 CR)会根据最新的OWNERS 配置重置评审规则。

# 添加临时 OWNER

为避免因文件所有的预置 OWNER 均无法评审导致的流程阻塞,工蜂支持 master 及以上权限的成员手动添加 OWNER 名单以外的项目成员作为文件的临时 OWNER,临时 OWNER 具有普通评审人的属性,评审通过后其负责的所有文件(含临时负责文件)将批量通过。

# 作者豁免规则设置

当 CR 作者恰好是文件 OWNER 之一时,默认该文件的修改无需由文件 OWNER 做额外确认(即作者豁免机制)。 该机制由评审设置中的开关控制,如果不希望作者豁免,变更文件仍需要由除作者以外的其他 OWNER 来确认,可关闭上图中的对应选项。

# 附录

# .code.yml-file 和 OWNERS 对比

CR 机制对比 .code.yml OWNERS
配置文件 .code.ymlfile OWNERS
配置基准 默认分支的配置为基准 默认分支的配置为基准
组织形式 一个仓库只有一份生效 每个目录都可以放置,目录移动时配置自动跟随
匹配逻辑 无继承,按顺序匹配 默认继承,父目录配置的 owner 对子目录也有效
评审规则 可配置多种评审规则 默认为“需要 1 个 owner 评审通过”,可声明为“不需评审”
文件评审人增删 只能对单个文件增删 不需独立操作,增删整单的评审人,系统自动对文件进行匹配增删
文件评审操作 独立操作,与整单的评审操作互为独立 不需独立操作,只需要进行整单的评审,文件的评审状态会同步修改
配置一致性 不完全一致,可以添加非 .code.yml 的 owner 完全一致,添加的评审人均来自OWNERS配置
触发条件 默认所有分支生效,不需要的分支需在.code.yml 中声明 按需开启,通过分支规则的配置开启

# CR OWNERS 推荐

开启了 OWNERS 评审后,创建 CR/MR 时,系统会根据为每个文件推荐至少一个 OWNER 作为评审人。

例子,如 /apps/OWNERS 内容为

owner_01
owner_02

/apps/main/OWNERS 内容为

owner_03
owner_04

当变更了 /apps/test.go 和 /apps/main/test.go 两个文件时,每个文件取最近的 OWNERS 的第一个人作为推荐评审人,则

  • /apps/test.go 的推荐评审人为 owner_01
  • /apps/main/test.go 的推荐评审人为 owner_03

此 MR/CR 单的推荐评审人为 owner_01,owner_03

  • owner_01 可评审/apps/test.go 和/apps/main/test.go
  • owner_03 可评审/apps/main/test.go

# 通配符(glob)语法在线验证工具

在线验证工具:https://www.digitalocean.com/community/tools/glob

lastUpdate: 4/2/2026, 11:20:06 AM