
新人刚上手,对团队规范还不熟,提交里常夹带一堆不符合约定的代码,给评审和后续维护添麻烦。腾讯云 CNB 支持在提交前用 lint、commitlint、git-pr-limit 等插件自动检查,把不规范挡在早期。本文介绍如何配置。
带过新人的团队,多半遇到过这种情况:新人干活积极,提交也勤,可一打开 PR,命名不规范、缩进随意、提交信息写成"update""改了点东西"、一次提交动辄改几百行……问题不大不小,却足够让评审者头疼、让后续维护吃力。
这类"不规范"不是新人态度问题,而是他们客观上还没建立起对团队约定的体感:
靠口头提醒和文档,效果都有限——前者会忘,后者没人翻。更管用的是把规范检查前置到"提交前",用机器在代码进入评审之前就先过一遍,不符合约定的直接拦下,让新人当场改、当场过,把不规范挡在早期。CNB 的流水线就能把这道"提交前检查"搭起来。
腾讯云云原生构建(Cloud Native Build,简称 CNB)基于 Docker 生态,用 .cnb.yml 声明式配置流水线,支持 Pipeline/Stage/Job 三层结构,也能按分支用 glob 模式匹配、由 push、commit.add、pull_request 等事件触发。它的插件市场提供了一批规范检查插件,可以在代码提交前或 PR 阶段自动执行检查。
对"新人提交不规范"这个场景,最贴切的几类插件是:
检查类型 | 插件 | 帮新人把什么关 |
|---|---|---|
代码风格 | go-lint、cpplint、markdown-lint、phplint 等 | 命名、缩进、未使用变量、潜在空值等风格与基础问题 |
提交信息 | commitlint | 提交注释是否符合约定式提交规范 |
PR 标题 | git-pr-title-lint | PR 标题是否符合团队约定格式 |
PR 变更规模 | git-pr-limit | 单次 PR 的 commit 次数和代码变更行数是否超限 |
把这些插件挂到流水线的提交前或 PR 环节,规范检查就从"评审者人肉提醒"变成"机器自动卡点"。新人提交时,不符合约定的地方会被当场指出并阻断,只能改到合规才能继续,从而在早期就把不规范挡下来。
新人最容易踩的,是代码风格这类细节:缩进用几个空格、命名怎么起、有没有未使用的变量、有没有潜在的空值风险。这些条目碎、记不全,靠新人自觉很难稳定达标。用对应语言的 lint 插件,可以在提交前把这些问题挑出来。
CNB 插件市场按语言提供了现成的 lint 插件,例如 Go 项目用 go-lint、C/C++ 项目用 cpplint、Markdown 文档用 markdown-lint、PHP 项目用 phplint。以 Go 项目为例,在 .cnb.yml 里挂一个检查 Stage:
main:
push:
- stages:
- name: 代码风格检查
image: cnbcool/go-lint:latest
# 让检查不通过时流水线失败(阻断提交),具体参数以插件详情页为准逐行看:
main: 表示对 main 分支生效,可按 glob 模式换成其他分支;push: 表示代码推送时触发,在提交进入仓库前就把关;image: cnbcool/go-lint:latest 使用官方 Go lint 插件镜像;配好之后,新人提交代码时,风格不达标会被当场拦下并给出提示。新人照着提示改到合规,提交才能通过。这样一来,规范不用再靠评审者一遍遍提醒,机器在提交前就替团队把好了关,新人也能在一次次修改中慢慢把规范内化成习惯。
实际落地时,可以按团队使用的语言,把对应的 lint 插件组合进同一条流水线,让多种语言的风格检查在一次提交里一并完成。
代码风格之外,新人还常在提交信息和 PR 标题上不规范。提交信息写成"update""修了个 bug",PR 标题不带模块或类型前缀,会给后续的变更日志、版本管理、问题检索添麻烦。
提交信息用 commitlint 卡。约定式提交(Conventional Commits)要求提交开头用 feat、fix、docs、refactor 这类类型前缀,后面跟简短说明。配置示例:
main:
push:
- stages:
- name: 提交信息检查
image: cnbcool/commitlint:latest
# 让检查不通过时流水线失败(阻断提交),具体参数以插件详情页为准提交信息不符合约定(比如"update"这种),流水线直接红灯,新人只能按规范重写。提交格式统一了,团队的变更记录、版本追溯都会顺很多。
PR 标题用 git-pr-title-lint。很多团队要求 PR 标题带上模块名或类型前缀,方便检索和归类。靠人工提醒容易漏,用插件在 PR 创建时检查标题格式,不符合约定的直接拦下:
main:
pull_request:
- stages:
- name: PR 标题检查
image: cnbcool/git-pr-title-lint:latest
# 让检查不通过时流水线失败(阻断 PR),具体参数以插件详情页为准把这两项挂进流水线,新人提交时就会主动按规范写信息和标题——因为不按规范写,根本过不去。格式统一这件事,就此从"靠提醒"变成"靠卡点"。
新人另一个常见习惯,是一次提交改动太大或 commit 太碎。几百行的大 diff 评审者看不动、容易漏;而十几个零碎 commit 又让记录杂乱、回滚困难。用 git-pr-limit 可以在 PR 阶段检查单次 PR 的 commit 次数和代码变更行数,把变更规模控制在合理范围。
对变更量或 commit 次数超出设定阈值的 PR,插件会让流水线失败,提醒新人把改动拆分成更小的、聚焦的 PR。这对新人尤其有帮助:它不只是卡规范,更是在帮新人建立"小步提交、便于评审、便于回滚"的好习惯。
git-pr-limit 与 lint 类插件配合,能让新人的提交在"风格—格式—规模"三个层面都被规范住。新人照着流水线提示一次次调整,提交质量会稳步提升,评审者反复返工的负担也随之减轻。
把提交前检查推给新人,方式上要讲究节奏,避免一上来就"处处卡死"打击积极性:
这样,提交前检查就不只是拦问题的关卡,也成了新人建立规范意识的抓手。
新人提交一堆不符合规范的代码,根源不在态度,而在于还没建立起对团队约定的体感。靠口头提醒和文档都治标,更管用的是把规范检查前置到提交前,用机器在代码进入评审之前就先过一遍,把不规范挡在早期。
CNB 的插件市场提供了 go-lint、cpplint、markdown-lint、phplint 等语言 lint 插件,以及 commitlint、git-pr-title-lint、git-pr-limit 这类检查工具,覆盖代码风格、提交信息、PR 标题和变更规模。把它们挂进 .cnb.yml 流水线,新人提交时不合规就会被当场拦下、改到合规才能继续,评审者反复返工的负担也因此减轻。
如果你的团队也有新人频繁提交不规范的代码,不妨在流水线里配上提交前检查,让机器先把好关。
想了解怎么配,可前往 腾讯云 CNB 参照官方流水线配置,在仓库 .cnb.yml 里挂上 lint、commitlint、git-pr-limit 等插件,把规范检查前置到提交前,让新人代码在进评审之前就先过一遍自动检查。
原创声明:本文系作者授权腾讯云开发者社区发表,未经许可,不得转载。
如有侵权,请联系 cloudcommunity@tencent.com 删除。