发布于 2026-01-06 2 阅读
0

使用 overcommit 实现代码检查自动化 推荐的内置钩子 其他(可能)有用的内置钩子 正在找工作?

使用超额提交实现代码检查自动化

推荐的内置挂钩

其他(可能)有用的内置钩子

正在找工作吗?

几个月前,我一直在寻找一种方法,防止我在调用调试器时提交/推送代码byebug。后来我发现了一个我之前并不了解的东西:Git Hooks。Git Hooks 允许在特定操作发生时运行自定义脚本,例如:提交、推送、合并、检出等等。

你可以在这些自定义脚本中编写任何你想要的内容,包括检查你是否做了某些不太明智的操作,例如,推送带有byebug调用的代码。如果你在谷歌上搜索,你会找到一些 Git hook 脚本来阻止你这样做。

但作为一名 Ruby 开发者,我当时就想:嘿,总会有办法的,对吧?!没错!它叫overcommit。Overcommit是一个 Ruby gem,可以让你轻松管理和配置 Git hooks。

使用 overcommit 非常简单:

$ gem install overcommit
$ overcommit --install
Enter fullscreen mode Exit fullscreen mode

overcommit --install命令将.overcommit.yml在当前文件夹中创建一个配置文件,并备份现有钩子。默认配置文件包含以下钩子:

  • CapitalizedSubject:确保提交消息的主题行以大写字母开头
  • EmptyMessage:检查提交消息是否为空。
  • SingleLineSubject:确保提交消息主题行后跟一个空行
  • TextWidth:确保主题和提交消息行所占用的列数在首选限制范围内。
  • TrailingPeriod:确保提交消息的主题行末尾不包含句点。
  • 作者邮箱:检查作者邮箱地址的格式
  • AuthorName:确保提交作者至少包含名字和姓氏。
  • BrokenSymlinks:检查损坏的符号链接
  • CaseConflicts:检查在不区分大小写的文件系统中可能冲突的文件

当然,您可以轻松禁用这些钩子中的任何一个:

  CapitalizedSubject:
    enabled: false
Enter fullscreen mode Exit fullscreen mode

每次修改配置文件后,都需要更新正在运行的签名。您也可以通过在配置文件中overcommit --sign进行设置来禁用签名检查。但是,请务必在执行此操作前了解其安全隐患verify_signatures: false.overcommit.yml

推荐的内置挂钩

本节介绍的钩子是我目前正在使用并推荐的。您还可以在钩子标题的括号内找到钩子执行的操作。

RuboCop(预提交)

对任何修改过的 Ruby 文件运行 RuboCop 检测。

  RuboCop:
    enabled: true
    on_warn: fail
    problem_on_unmodified_line: ignore
    command: ['bundle', 'exec', 'rubocop']
Enter fullscreen mode Exit fullscreen mode
  • on_warn: fail如果出现警告,则阻止提交。
  • problem_on_unmodified_line: ignore忽略您未添加/更改的代码行中的问题

捆绑审计(提交前)

检查 Gemfile.lock 中是否存在易受攻击的 gem 版本。

  BundleAudit:
    enabled: true
    flags: ['--update']
Enter fullscreen mode Exit fullscreen mode
  • flags: ['--update']强制 BundleAudit 在检查前进行更新

捆绑检查(提交前)

当本地 Gemfile.lock 文件或 Gemfile 文件发生更改时,检查它们是否匹配,除非Gemfile.lockgit 忽略此操作。

  BundleCheck:
    enabled: true
Enter fullscreen mode Exit fullscreen mode

禁止分支(PreCommit 和 PrePush)

阻止向与已配置模式之一匹配的分支提交。

  ForbiddenBranches:
    enabled: true
    branch_patterns: ['master']
Enter fullscreen mode Exit fullscreen mode

更快(预提交)

fasterer可对任何修改过的 Ruby 文件运行。

  Fasterer:
    enabled: true
    exclude:
      - 'vendor/**/*.rb'
      - 'db/schema.rb'
Enter fullscreen mode Exit fullscreen mode

自定义脚本(提交前)

提交前运行自定义命令/脚本。

  CustomScript:
    quiet: true
    enabled: true
    command: ['i18n-tasks', 'normalize']
Enter fullscreen mode Exit fullscreen mode

前一个钩子会在提交之前运行i18n-tasks normalize。这是i18n-tasksnormalize gem的一个任务

BundleInstall(PostCheckout、PostMerge 和 PostRewrite)

bundle install当检测到存储库的依赖项发生更改时运行。

  BundleInstall:
    enabled: true
Enter fullscreen mode Exit fullscreen mode

其他(可能)有用的内置钩子

这些是我目前没有使用但愿意尝试的钩子。

  • Foodcritic:一款用于编写更好、更安全代码的代码检查工具
  • RailsBestPractices:用于检查 Rails 代码质量的代码指标工具
  • RailsS​​chemaUpToDate:检查 schema 文件是否与迁移文件一致。
  • Reek:Ruby 代码异味检测器
  • Brakeman:一款专为 Rails 应用设计的漏洞扫描器。它通过静态分析代码来查找安全问题。
  • FixMe :提交前检查是否存在“token”(例如TODO,` ,` 等)字符串FIXME
  • BundleOutdate:列出已安装的 gem 及其可用更新版本。

正在找工作吗?

如果您正在寻找工作,并且居住在法兰克福附近或愿意搬迁,Creditshelf目前有职位空缺。所有职位均面向英语使用者开放

文章来源:https://dev.to/jalerson/automating-code-checks-with-overcommit-1cc3