当前位置: 首页 > article >正文

gitru:一个由 Rust 打造的零依赖 Git 提交信息校验工具

gitru 基于 Git 的commit-msgHook 实现用于在提交阶段自动校验提交信息格式。在团队协作开发中规范的 Git 提交信息是代码追溯、版本管理、自动生成变更日志的基础。但现实往往是人工约束容易遗漏手动配置 Hook 繁琐提交信息格式随心所欲生成 changelog 时异常痛苦因此必须由工具来保证提交信息的规范性。市面上已有不少成熟工具但大多基于 Node.js / Python / Shell 实现。问题是只是想校验一个字符串却要先安装 Node 或 Python版本不一致可能导致各种奇怪的问题国内下载依赖速度慢甚至失败安装一个工具可能要拉下一堆包属于“操作一大堆却还没开始进入正题”。这些对普通开发者尤其是新手并不友好。当然这并不是否定这些工具。相反它们非常优秀本项目开发过程中也使用了著名的pre-commit。与这些成熟工具相比gitru 甚至连 hello-world 都算不上只是一个更轻、更简单的选择。基于以上考虑再加上 Rust 非常适合编写 CLI 工具于是就有了gitru。✨ 项目特点Rust 编写零依赖二进制分发下载即可运行无需 Node、Python 或虚拟环境。虽然我不想把“Rust 编写”当成卖点免得被误会成 Rust 传教士但和其他成熟工具相比这确实是 gitru 少数能拿得出手的特点之一。⚙️TOML 格式自定义规则简单、清晰、易读、易维护。⏭️支持通过关键字跳过校验适用于自动化提交、紧急修复等场景。支持中文提交信息校验不会误判中文标点对中文开发者更友好。错误信息带颜色输出更直观、更易读。支持 Footer 关键字拼写校验Spell Check当提交信息疑似拼写错误时gitru 会自动检测并给出友好提示避免因拼写错误导致自动化流程失效。(当然这部分依赖算法和用户配置体验远不如当下的ai) Conventional Commits 简介在介绍 gitru 的使用前必须先了解业内广泛采用的提交规范 ——Conventional Commits。它定义了提交信息的结构type[optional scope]: subject [optional body] [optional footer(s)]其中type必填如feat、fix用于分类scope可选如core、ui用于描述影响范围!可选表示破坏性变更subject必填简短描述本次变更body可选详细说明footer可选如 BREAKING CHANGE、Closes #123gitru 就是基于此规范实现的并允许你通过配置文件进行自定义。 安装 gitru你可以通过三种方式安装方式一直接下载二进制文件推荐前往 GitHub Releases下载对应平台的压缩包解压后放到任意目录加入 PATHLinux / macOS 可能需要执行权限方式二通过 cargo 安装需 Rust 环境cargoinstallgitru方式三本地编译gitclone https://github.com/xiyixiaodao/gitru.gitcdgitrucargoinstall--path.验证安装gitru--version 使用方法一键初始化以下命令会同时安装 Hook 并生成配置文件gitru ii commit-msg它等价于gitruinstallcommit-msg gitru init commit-msg如果文件已存在可强制覆盖gitru ii commit-msg-f卸载 Hookgitru uninstall commit-msg然后手动删除.commit-msg-rule.toml。⚙️ 自定义校验规则gitru 的核心是配置文件.commit-msg-rule.toml。你只需要修改它就能完全定制校验逻辑。为什么选择TOML而不是 YAMLYAML 结构依赖缩进容易错位.yaml/.yml后缀容易混淆TOML 更简单、可读性更强对新手更友好即使你不懂 TOML也完全不影响使用。 配置文件示例下面是 gitru 初始化后生成的配置文件部分注释已去除# ╔═════════════════════════════════════════════════╗ # ║ COMMIT FORMAT TEMPLATE ║ # ╠═════════════════════════════════════════════════╣ # ║ type(optional scope): subject ║ # ║ ║ # ║ [optional body] ║ # ║ ║ # ║ [optional footer] ║ # ║ - BREAKING CHANGE: xxxxx ║ # ║ - Closes #issue ║ # ╚═════════════════════════════════════════════════╝ [global] version 1.0.0 enable_validation true skip_validation_words [--no-verify, SKIP] [header.type] allowed_types [feat, fix, docs, style, refactor, test, chore, ci] [header.scope] required false allowed_scopes [core, cli, ui, docs, test] [header.subject] spaces_after_colon 1 forbid_trailing_period true min_length 2 max_length 72 [body] required false min_blank_lines_before_body 1 forbid_trailing_whitespace true min_line_length 2 max_line_length 72 [footer] start_key_words [BREAKING CHANGE, Closes, Fixes, Signed-off-by] min_blank_lines_before_footer 1 min_line_length 2 max_line_length 72 forbid_trailing_whitespace true [footer.start_key_words_spellcheck] enable true threshold 0.7 配置项详解下面对关键配置项进行说明按模块划分。1. 全局配置global控制 gitru 的整体行为[global] version 1.0.0 enable_validation true skip_validation_words [--no-verify, SKIP]version: 用于以后大版本变更升级区分当前没有区别。enable_validation是否启用校验skip_validation_words提交信息第一行完全匹配时跳过校验2. Header 校验Header 是最重要的部分包含type(scope): subject2.1 type 校验[header.type] allowed_types [feat, fix, docs, style, refactor, test, chore, ci]避免出现update、tmp、aaa等无意义 type让团队提交类型统一让 changelog 自动生成更准确⚠不允许为空数组若不需要 type 校验请注释掉整个字段。提交示例校验通过feat: add login API校验失败#错误示例1 update: change UI layout #提示 error: commit type update is not in the allowed list, allowed types are [feat, fix, docs, style, refactor, test, chore, ci] #错误示例2 feats: add login API #提示 error: unknown commit type feats help: did you mean feat? (similarity 0.80) note: allowed types: [feat, fix, docs, style, refactor, test, chore, ci]2.2 scope 校验[header.scope] required false allowed_scopes [core, cli, ui, docs, test]required true→ 必须提供 scoperequired false→ 可选若提供 scope必须在 allowed_scopes 中⚠ allowed_scopes 不允许为空数组若不需要校验请注释掉整个字段。2.3 subject 校验[header.subject] spaces_after_colon 1 forbid_trailing_period true min_length 2 max_length 72限制冒号后空格数量(默认为推荐的1个建议不要修改)禁止句号结尾(包含英文句号和中文句号)限制 subject 长度3. Body 校验[body] required false min_blank_lines_before_body 1 forbid_trailing_whitespace true min_line_length 2 max_line_length 72默认可选body和header之间的空行数量(不建议修改)禁止行尾出现多余空格限制 body每一行的长度4. Footer 校验[footer] start_key_words [BREAKING CHANGE, Closes, Fixes, Signed-off-by]footer部分的起始关键字支持关键字拼写检查[footer.start_key_words_spellcheck] enable true threshold 0.7提交示例feat: test footer Close: #123错误提示error: footer keyword appears misspelled: Close → Closes similarity 0.83 (threshold 0.70)⭐ gitru 的两大特色能力1. 跳过校验Skip Validation虽然提交信息规范非常重要但在实际开发中总会遇到一些必须绕过校验的场景这些提交往往不需要遵循团队的 commit 规范甚至无法遵循。因此gitru 必须提供一种安全、明确、可控的方式来跳过校验。在 Git 生态中常见的跳过校验方式有三种①命令行参数git commit --no-verifyGit 原生支持gitcommit --no-verify它会跳过所有 Hook包括commit-msgpre-commitprepare-commit-msgpost-commit②IDE 设置跳过 Hook例如JetBrains 系列IDEA / PyCharm / RustRoverVSCode不同IDE的设置不一致有的需要设置中默认开启才会有对应操作比如VSCode有的选择跳过后如果忘记手动选回来后续校验也会继续跳过。③gitru 的方式提交信息首行关键字gitru 允许通过提交信息第一行完全匹配关键字来跳过校验注意关键字可在配置文件中配置但是严格区分大小写(当然如果只是大小写不一致会有报错信息准确提示)示例SKIP fix: hotfix production issue或--no-verify feat: auto commit from script默认配置下以上提交都会直接跳过所有校验并且在最终生成的校验信息中去除首行关键字。2. 拼写检测Spell Check由于规范约定缘故body可选中间可有空行footer也是可选的所以很难区分二者。gitru采用了footer配置关键字来区分。这样一来footer校验严重依赖用户输入的单词而人是最靠不住的所以尽可能做点保障校验用户是否拼写错误。检测 footer 关键字是否拼写错误避免Clsoe、Fixex这种低级错误导致自动化流程失效使用相似度算法默认阈值 0.7当检测到疑似拼写错误时会阻止提交并给出友好提示如果用户确认自己没错就可以使用上一步提供的方法跳过校验强制提交。footer提取关键字依赖:分割。由于footer部分自由度太高目前没想到完美的校验方法好在我们大部分时间用到的是header和body校验。 总结gitru 的目标不是取代现有工具而是提供一个更轻量更简单更易安装更适合非 Node/Python 项目的 commit-msg 校验方案。如果你在使用过程中有任何建议或问题欢迎在 GitHub 提 issue一起让这个小工具变得更好。

相关文章:

gitru:一个由 Rust 打造的零依赖 Git 提交信息校验工具

gitru 基于 Git 的 commit-msg Hook 实现,用于在提交阶段自动校验提交信息格式。 在团队协作开发中,规范的 Git 提交信息是代码追溯、版本管理、自动生成变更日志的基础。 但现实往往是: 人工约束容易遗漏手动配置 Hook 繁琐提交信息格式随心…...

政务短信钓鱼攻击机理与防控研究 —— 以美国宾州 PennDOT 诈骗事件为例

摘要 2026 年 3 月 27 日,宾夕法尼亚州官方发布安全预警,提示公众警惕冒充 PennDOT(宾州交通局)的短信钓鱼诈骗。此类攻击以车辆管理、罚单缴费、证件状态异常为诱饵,通过仿冒政务身份诱导用户点击恶意链接&#xff0c…...

避坑指南:使用OverPy API获取OSM路网数据时常见的5个错误及解决方法

OverPy API实战避坑指南:5个高频错误与专业解决方案 当开发者第一次接触OverPy API与OpenStreetMap数据时,往往会陷入一些看似简单却影响深远的陷阱。我曾在一个城市交通分析项目中连续三天被边界框坐标顺序问题困扰,直到发现查询结果中道路片…...

3000份绝密文件外泄!Anthropic“核弹级”AI Mythos一夜封神,AGI防盗门被敲碎

Anthropic“防盗门”被敲了三下,声音来自自家后院。 一次配置失误,近3000份内部文档裸奔,把尚未出生的Mythos(对外昵称Capybara)推到了聚光灯下。 它有多强?一句话:在软件编程、学术推理、网络安…...

三步搞定!用bilidown轻松下载B站8K超清视频的完整指南

三步搞定!用bilidown轻松下载B站8K超清视频的完整指南 【免费下载链接】bilidown 哔哩哔哩视频解析下载工具,支持 8K 视频、Hi-Res 音频、杜比视界下载、批量解析,可扫码登录,常驻托盘。 项目地址: https://gitcode.com/gh_mirr…...

ArduPilot开源飞控之飞行模式切换机制解析

1. ArduPilot飞行模式概述 第一次接触ArduPilot时,最让我震撼的就是它丰富的飞行模式。就像开车时有手动挡、自动挡、运动模式一样,无人机也需要根据不同的飞行场景选择合适的"驾驶模式"。举个例子,新手练习时用Stabilize模式就像开…...

全网最全!网络安全全岗位解析(2026版)

全网最全!网络安全全岗位解析(2026版) 摘要:随着数字化转型加速,网络安全已成为企业、政务、互联网大厂的核心刚需,人才缺口持续扩大,2026年国内网络安全人才缺口已突破327万,全球缺…...

从零到上线:手把手教你用LLaMA-Factory + Python脚本自动化微调Qwen2.5模型

从零到上线:手把手教你用LLaMA-Factory Python脚本自动化微调Qwen2.5模型 在AI模型开发领域,微调预训练模型已成为快速适配特定任务的主流方法。然而,传统微调流程往往需要开发者反复手动调整配置文件、执行训练命令、监控训练过程&#xff…...

运维面试别再背八股文了!这15道高频笔试题,我用真实排错案例给你讲透

运维面试突围指南:用真实故障案例拆解15道高频技术题 去年冬天的一个凌晨,我接到了一通紧急电话——某电商平台的支付系统突然瘫痪,每分钟损失超过六位数。当我顶着寒风赶到机房时,发现这只是因为一个简单的NTP时间不同步问题。这…...

LangChain4j向量化实战避坑:OpenAI、本地模型、Qdrant选哪个?我的踩坑记录

LangChain4j向量化实战避坑指南:OpenAI、本地模型与Qdrant的深度抉择 当Java开发者尝试构建基于大语言模型的应用时,LangChain4j框架中的向量化组件往往成为技术栈选型的第一个分水岭。我在三个实际项目中分别尝试了不同组合方案后,发现每个…...

小产后吃什么恢复快?科学修护助力身体回归健康

小产对女性身体的损伤不容忽视,气血亏虚、子宫损伤等问题若调理不当,可能留下长期健康隐患。当前,小产后修护已成为女性健康领域的重要关注点,如何通过科学方式实现高效恢复,避免浅层调理带来的后续问题,是…...

C语言数组操作:3种移除元素方法实战对比(附LeetCode真题解析)

C语言数组操作:3种移除元素方法实战对比(附LeetCode真题解析) 在算法面试和日常编程中,数组操作是最基础也最常考察的技能点之一。移除数组中特定元素这类看似简单的任务,却能很好地检验程序员对内存管理、算法效率和…...

重新定义开源RTS体验:Beyond All Reason深度技术解析

重新定义开源RTS体验:Beyond All Reason深度技术解析 【免费下载链接】Beyond-All-Reason www.beyondallreason.info 项目地址: https://gitcode.com/gh_mirrors/be/Beyond-All-Reason Beyond All Reason是一款基于Spring引擎开发的开源实时战略游戏&#xf…...

彻底禁用fmt库文件系统依赖:从编译到代码的全链路方案

彻底禁用fmt库文件系统依赖:从编译到代码的全链路方案 【免费下载链接】fmt A modern formatting library 项目地址: https://gitcode.com/GitHub_Trending/fm/fmt 在C项目中,fmt库是一个现代格式化库,它提供了高效的类型安全格式化功…...

从RS232到112G SerDes:高速串行接口的‘逆袭’简史与FPGA工程师的生存指南

从RS232到112G SerDes:高速串行接口的技术革命与工程师转型指南 在数字通信领域,接口技术的演进犹如一场静默的革命。二十年前,工程师们还在为并行总线的布线复杂度和时钟偏移问题头疼不已;而今天,单通道112G PAM4 Ser…...

BoltDB vs Redis 读性能对比:实测表现与原理差异

一、前言 BoltDB(bbolt)与 Redis 都是高并发场景下常见的键值存储,但存储架构、存储介质、并发模型完全不同,导致两者在读性能、延迟、并发扩展性上呈现巨大差异。 本文从原理、延迟、并发读能力、资源开销四个维度对比两者的读性…...

Sora.FM零基础部署指南:3步上手AI视频生成工具的Linux实践方案

Sora.FM零基础部署指南:3步上手AI视频生成工具的Linux实践方案 【免费下载链接】sorafm 项目地址: https://gitcode.com/GitHub_Trending/so/sorafm Sora.FM是一款基于Sora AI技术的开源视频生成平台,支持通过文本描述创建高质量AI视频。本指南专…...

如何用JavaScript高效处理PSD文件:Ag-PSD库的完整技术指南

如何用JavaScript高效处理PSD文件:Ag-PSD库的完整技术指南 【免费下载链接】ag-psd Javascript library for reading and writing PSD files 项目地址: https://gitcode.com/gh_mirrors/ag/ag-psd 在当今Web应用开发中,处理Photoshop文档&#xf…...

3大突破!零门槛掌握资源嗅探:猫抓插件全平台使用指南

3大突破!零门槛掌握资源嗅探:猫抓插件全平台使用指南 【免费下载链接】cat-catch 猫抓 chrome资源嗅探扩展 项目地址: https://gitcode.com/GitHub_Trending/ca/cat-catch 一、为什么你需要专业的资源嗅探工具? 场景化痛点直击 作为…...

遥感项目实战:用SNAP高效处理Sentinel-2多景影像进行地表覆盖分析

遥感项目实战:用SNAP高效处理Sentinel-2多景影像进行地表覆盖分析 当我们需要对大面积区域进行地表覆盖分析时,单景Sentinel-2影像往往无法满足需求。这时,多景影像的拼接与处理就成为关键步骤。本文将带您深入了解如何利用SNAP软件高效处理S…...

JS逆向新手也能搞定:手把手教你用Node.js补全ali140滑块canvas环境(附完整代码)

JS逆向新手也能搞定:手把手教你用Node.js补全ali140滑块canvas环境(附完整代码) 第一次接触JS逆向时,看到那些复杂的加密逻辑和环境检测代码,确实让人望而生畏。特别是遇到canvas这种需要模拟浏览器环境的场景&#xf…...

Lean 4:用数学证明构建高可靠软件的革命性工具

Lean 4:用数学证明构建高可靠软件的革命性工具 【免费下载链接】lean4 Lean 4 programming language and theorem prover 项目地址: https://gitcode.com/GitHub_Trending/le/lean4 问题:当系统崩溃成为不可承受之重 2024年3月,某医疗…...

3大突破性功能:Koodo Reader重塑你的跨平台数字阅读体验

3大突破性功能:Koodo Reader重塑你的跨平台数字阅读体验 【免费下载链接】koodo-reader A modern ebook manager and reader with sync and backup capacities for Windows, macOS, Linux and Web 项目地址: https://gitcode.com/GitHub_Trending/koo/koodo-reade…...

每日算法练习:LeetCode 151. 反转字符串中的单词 ✅

大家好,我是你们的算法小伙伴。今天我们来练习一道字符串处理的经典中等题 ——LeetCode 151. 反转字符串中的单词。这道题考察对空格和单词边界的处理,是面试中高频的字符串操作题。题目描述给你一个字符串 s,请你反转字符串中单词的顺序。单…...

STM32架构解析:哈佛与冯·诺依曼的工程实践

STM32处理器架构解析:哈佛结构与冯诺依曼结构的工程实践 1. 计算机体系结构基础 1.1 冯诺依曼体系结构 冯诺依曼体系结构(Von Neumann architecture)是现代计算机的基础设计范式,其核心特征包括: 统一存储结构 &am…...

Halcon角度计算双雄对比:orientation_region和smallest_rectangle2到底该用哪个?

Halcon角度计算双雄对比:orientation_region与smallest_rectangle2的实战抉择 在工业视觉检测中,区域角度计算是定位、对齐和测量的基础操作。Halcon作为机器视觉领域的标杆工具,提供了orientation_region和smallest_rectangle2两个核心算子来…...

C语言和C++有啥区别?孩子学编程该选哪个

C乃是当下国内信息学奥赛所指定的语言,它还是现今最为流行的编程语言当中的一种,所以不少孩子于选择编程语言去学习时,会挑选C这种编程语言。从C的名字不难看出,它跟老牌语言C语言之间有着颇深的关系。那么,C与C语言的…...

保障AI安全:YOLOv12模型鲁棒性测试与对抗样本防御

保障AI安全:YOLOv12模型鲁棒性测试与对抗样本防御 在智能安防、自动驾驶这些关键领域,AI模型,尤其是像YOLOv12这样的目标检测模型,已经成为了核心的“眼睛”。我们依赖它来识别行人、车辆,做出至关重要的判断。但你想…...

论文AI率从80%降到10%以下的完整攻略:实测3款降AI率工具真实效果

论文AI率从80%降到10%以下的完整攻略:实测3款降AI率工具真实效果 上个月我同学发来一张知网检测报告,AI率87%,整个人都懵了。她用DeepSeek写了大部分初稿,没想到检测会这么高。当时距离论文提交截止不到两周,她问我有没…...

7个维度解锁洛雪音乐音源:从新手到专家的全方位指南

7个维度解锁洛雪音乐音源:从新手到专家的全方位指南 【免费下载链接】lxmusic- lxmusic(洛雪音乐)全网最新最全音源 项目地址: https://gitcode.com/gh_mirrors/lx/lxmusic- 洛雪音乐音源作为GitHub加速计划的重要组成,是一款专注于音乐资源聚合的…...