尧图网络科技YAOTU DIGITAL 获取报价
获取报价
首页 / 资讯中心 / 文章详情

RuboCop 如何用 --changed 只检查当前分支改动的代码?

发布时间:2026/9/15 17:46:56

资讯中心
01
ARTICLE

RuboCop 如何用 --changed 只检查当前分支改动的代码?

RuboCop 如何用 --changed 只检查当前分支改动的代码?
RuboCop 如何用 --changed 只检查当前分支改动的代码【免费下载链接】rubocopA Ruby static code analyzer and formatter, based on the community Ruby style guide.项目地址: https://gitcode.com/GitHub_Trending/rub/rubocop在一个已经运行多年的 Ruby 项目里直接在根目录执行rubocop会递归检查目录下所有 Ruby 文件。代码库越大、历史遗留的 offense 越多一次全量检查的输出就越长而且大部分结果和你刚写的代码没有关系。RuboCop 从 1.91.0 开始提供--changed选项它向 git 询问哪些文件发生了变化然后只检查这些文件让你用一条命令完成只查当前分支改动的检查。该选项只在 git 仓库内有效并且要求 git 已安装、位于PATH上项目本身需要先安装 RuboCop见 Installation。工作原理git 决定要检查哪些文件--changed不做自己的文件扫描它把文件列表交给 git 回答再与 RuboCop 常规的检查目标取交集。据 Getting Started 的说明rubocop --changed默认对比HEAD即自上次提交以来有差异的文件包括已修改、已暂存和未跟踪的文件。未跟踪的新文件同样算作改动CLI Reference 中同样标注 defaulting toHEAD、Untracked files count as changed。rubocop --changedREVISION可以换成任意 git 修订号作为对比基线例如--changedmain覆盖分支相对 main 的全部改动。被删除的文件会被跳过没有内容可检查。.rubocop.yml里的Include/Exclude依然生效。最终检查的是git 说有改动与RuboCop 本来就会检查两者的交集。被检查的是整个文件而不是改动的行。你碰过的文件里没写的部分仍然会被报告 offense。如果需要行级过滤文档提到可以使用 Pronto 等第三方工具。准备条件用 gem 安装$ gem install rubocop或者用 bundler 管理时在Gemfile中声明注意require: falsegem rubocop, require: false运行前提项目目录位于 git 仓库内。在 git 仓库之外--changed会直接报错而不是猜测。git 命令可用。若 git 不在PATH上RuboCop 会报--changed requires git to be installed and on your PATH.见 lib/rubocop/changed_files.rb。仓库没有任何提交时所有文件都算改动--changed等价于检查全部文件。本地检查只看工作区改动的文件在分支上改完代码后运行$ rubocop --changed进度输出的第一行会显示形如Inspecting N files的统计N 应等于你改动含新增的文件数而不是整个仓库的文件数。要确认具体是哪些改动文件被标记了 offense可以加上机器可解析的filesformatter见 Formatters它只输出有 offense 的文件名$ rubocop --changed --format files该 formatter 每个文件占一行输出方便管道给其他工具文档给出的示例用法是rubocop --format files | xargs vim。两个可以直接对照的判断结果来自 spec/rubocop/cli/changed_spec.rb 验证的行为工作区干净、没有任何改动时--changed无文件可查输出包含no offenses detected退出码为 0。改动文件存在 offense 时--format files输出该文件名退出码为 1。如果只想在改动后预览自动修复会做什么可以加--diff$ rubocop --changed --diff--diff只打印 autocorrect 将要产生的 unified diff不写任何文件。文档把这一组合推荐用于大型代码库采纳中期的本地快速检查改动几个文件后提交前先在改动范围内预览修复内容。在 CI 中相对 main 检查整个分支本地场景对比的是HEADCI 上更常见的需求是这个分支相对 main 改了什么就查什么。文档给出的命令是$ git fetch origin main --depth1 $ rubocop --changedorigin/main文档对这一用法的定位是在 CI 上让新代码遵守整个仓库尚未达到的标准而不需要一份.rubocop_todo.yml。历史债务不会因为一次全量检查而挡住新提交的合并。把范围再缩小到某个目录在命令行上给出的路径会与改动文件列表进一步取交集而不是替换它。例如只关心lib下的改动$ rubocop --changed --format files lib注意书写位置如果写成rubocop --changed libCLI 会把紧跟在--changed后面的lib解析成修订号。测试验证了这一形式会以退出码 2 结束stderr 报告--changed takes a git revision, but lib is a path.Getting Started 文档中以rubocop --changed lib举例说明路径收窄但实际 CLI 解析行为以上面测试验证的形式为准。把路径放在其他选项之后是可靠的写法。结果判断退出码--changed的退出码遵循 RuboCop 通用规则见 CLI Reference0没有 offense或所有 offense 低于--fail-level。默认情况下使用--autocorrect时已被自动修复的 offense 不算失败。1发现一个或多个达到--fail-level的 offense。默认即未被自动修复的 offense。2异常终止无效配置、无效 CLI 选项或内部错误。--changed相关的报错场景都落在这档场景表现在 git 仓库外运行报错stderr 含not a git repository不会猜测文件列表修订号不存在如--changedno-such-revision退出码 2stderr 报告--changed could not ask git which files changed与--stdin同时使用退出码 2报告--changed cannot be used with --stdin.git 未安装或不在PATH上报告--changed requires git to be installed and on your PATH.可选把 --changed 设为默认行为默认命令行选项会从.rubocop文件和RUBOCOP_OPTS环境变量加载再与显式传入的命令行选项合并优先级从高到低为显式命令行选项 RUBOCOP_OPTS.rubocop文件。因此可以把--changed写入这两处之一让本地每次运行默认只检查改动文件需要全量检查时再显式去掉。相关文档Getting Started — Inspecting Only What Changed 一节--changed的完整用法示例CLI Reference —--changed[REVISION]参数说明与退出码定义Formatters —files等机器可解析输出格式lib/rubocop/changed_files.rb — 向 git 查询改动文件的实现与全部报错文案spec/rubocop/cli/changed_spec.rb —--changed的行为验证包括各类错误退出场景【免费下载链接】rubocopA Ruby static code analyzer and formatter, based on the community Ruby style guide.项目地址: https://gitcode.com/GitHub_Trending/rub/rubocop创作声明:本文部分内容由AI辅助生成(AIGC),仅供参考
02
RELATED NEWS

相关资讯

更多网站建设与数字化升级内容

03
WHY YAOTU

想打造同款高转化官网?

懂行业、懂生意,从建站到增长一站式陪跑

场景化定制

不做模板站,围绕你的业务场景量身设计,小众不撞款。

营销型架构

以转化目标组织内容与路径,让官网真正带来询盘。

全周期服务

设计、开发、运营、运维一体,上线只是开始。

免费获取你的建站方案

留下需求,专属顾问 24 小时内为你输出方案建议。