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

工程化:Commitlint / 规范化Git提交消息格式

一、理解Commitlint

Commitlint是一个用于规范化Git提交消息格式的工具。它基于Node.js,通过一系列的规则来检查Git提交信息的格式,确保它们遵循预定义的标准。

1.1、Commitlint的核心功能

代码规则检查:Commitlint基于代码规则进行检查,这些规则可以自定义以适应项目的特定需求。例如,可以设置规则来要求所有的函数都有明确的参数列表等。
多种编程语言和框架支持:Commitlint支持多种编程语言和框架,如JavaScript、Python、React、Angular等,使其能够适应各种项目需求。
可视化报告和警告:Commitlint提供可视化报告和警告,帮助团队成员了解有关代码问题的详细信息。

1.2、Commitlint的工作流程

它在Git的commit-msg钩子中运行,这意味着每次提交时,Commitlint都会自动检查提交信息。
如果提交信息不符合规则,Commitlint会阻止提交并给出错误提示。

此外,Commitlint与Husky等工具可以配合使用,确保代码在提交到版本控制系统之前经过检查和验证。

二、vue3 + ts 项目使用Commitlint

pnpm add  @commitlint/cli @commitlint/config-conventional

pnpm add husky

.commitlintrc.js

module.exports = {  extends: ['@commitlint/config-conventional'],  
};

测试

提交成功

验证通过

三、过程记录

3.1、.commitlintrc.js

.commitlintrc.js 是一个配置文件,用于 Commitlint,一个工具,用于帮助你在 Git 仓库中强制执行一致的 commit message 格式。Commitlint 允许你定义规则,这些规则会在你尝试提交一个新的 Git commit 时被检查。

这个文件通常包含一个配置对象,该对象定义了你希望 Commitlint 遵循的规则。

以下是一个简单的 .commitlintrc.js 示例:

module.exports = {  extends: ['@commitlint/config-conventional'], // 使用常规的 commitlint 配置文件  rules: {  'type-enum': [2, 'always', ['feat', 'fix', 'docs', 'style', 'refactor', 'perf', 'test', 'build', 'ci', 'chore', 'revert']], // 定义允许的提交类型  'scope-case': [2, 'always', 'lower-case'], // 强制提交范围为小写  'subject-case': [0], // 不强制主题大小写(但通常建议使用 sentence-case)  'subject-empty': [2, 'never'], // 禁止空的提交主题  'subject-full-stop': [0, 'never'], // 不强制主题以句号结尾  'header-max-length': [2, 'always', 72], // 强制 header 最大长度为 72 个字符  'body-leading-blank': [1, 'always'], // 强制 body 前面有一个空行  'footer-leading-blank': [1, 'always'], // 强制 footer 前面有一个空行  'footer-max-line-length': [2, 'always', 80], // 强制 footer 的每行最大长度为 80 个字符  },  parserPreset: {  parserOpts: {  headerPattern: /^(\w*)(?:\(([\w$\.,\s]*?)\))?\s*:(.*)$/, // 自定义 header 的正则表达式  headerCorrespondence: ['type', 'scope', 'subject'], // 与 headerPattern 匹配的部分  },  },  
};

四、欢迎交流指正

http://www.lryc.cn/news/391387.html

相关文章:

  • 电脑有线网卡和无线网卡的MAC地址
  • 代码随想录-DAY②-数组——leetcode 977 | 209
  • 稀疏数组搜索
  • 存储器类型介绍
  • 论文学习笔记1:Federated Graph Neural Networks: Overview, Techniques, and Challenges
  • [数据集][目标检测]轮椅检测数据集VOC+YOLO格式13826张1类别
  • 视频剪辑音乐自动卡点Pr插件 BeatEdit v2.2 免费下载
  • 【INTEL(ALTERA)】为什么Nios® II构建流程报告无法在 Windows WSL 上确定程序大小?
  • 2024年第十四届APMCM亚太地区大学生数学建模竞赛
  • 删除账户相关信息
  • JavaSE (Java基础):面向对象(下)
  • Element中的日期时间选择器DateTimePicker和级联选择器Cascader
  • Construct公司 从 0 到 1 基于 Kitex+Istio 的微服务系统建设
  • day04-组织架构
  • Web3 开发者入门手册:技能、工具和职业前景
  • 元宇宙虚拟实景展馆树立客户对企业的信任和好感
  • 【C语言】宏定义在 a.c 中定义,如何在 b.c 中使用?
  • vue3 滚动条滑动到元素位置时,元素加载
  • [Linux] 相对路径(Relative Path)与绝对路径(Absolute Path)
  • [ESP32] I2S播放wav文件
  • YOLOv8
  • 协程调度模块
  • 2024 最新docker仓库镜像,6月,7月
  • 探索Vim的文本处理能力:精通查找与替换
  • 2024.7.4学习日报
  • 享元模式(Flyweight Pattern)
  • Oracle连接mysql
  • golang 垃圾回收
  • React 中如何使用 Monaco
  • 开源RAG个人知识库项目开发分析