前端代码规范- Commit 提交规范

什么是约定式提交

约定式提交(Conventional Commits)是一种用于代码版本控制的规范,旨在通过明确和标准化提交信息来提高代码协作质量和效率。其基本原则是通过规定提交信息的结构和语义来提高代码版本控制的可读性、可维护性和自动化程度。

约定式提交规范通常要求提交信息包括一个描述性的"类型"、一个可选的"作用域"、一个用于简洁说明的"主题",以及可选的"正文"和"尾部"等组成部分。这些组成部分的格式和语义都是根据规范要求进行约定的,比如使用"feat"来表示新功能、"fix"表示修复错误、"docs"表示文档变更等。

通过遵循约定式提交规范,开发人员可以更容易地理解和管理代码的变更历史,同时也为自动化工具提供了更多可靠的信息,例如自动生成版本号、发布日志和代码库更新等操作。

提交说明的结构如下所示:


原文:

<type>[optional scope]: <description>[optional body][optional footer(s)]
复制代码

译文:

<类型>[可选 范围]: <描述>[可选 正文][可选 脚注]
复制代码

提交说明包含了下面的结构化元素,以向类库使用者表明其意图:

  1. fix: 类型 为 fix 的提交表示在代码库中修复了一个 bug(这和语义化版本中的 `PATCH`[1] 相对应)。

  2. feat: 类型 为 feat 的提交表示在代码库中新增了一个功能(这和语义化版本中的 `MINOR`[2] 相对应)。

  3. BREAKING CHANGE: 在脚注中包含 BREAKING CHANGE: 或 <类型>(范围) 后面有一个 ! 的提交,表示引入了破坏性 API 变更(这和语义化版本中的 `MAJOR`[3] 相对应)。破坏性变更可以是任意 类型 提交的一部分。

  4. 除 fix: 和 feat: 之外,也可以使用其它提交 类型 ,例如 \@commitlint/config-conventional[4](基于 Angular 约定[5])中推荐的 build:chore:、 ci:docs:style:refactor:perf:test:,等等。

  5. 脚注中除了 BREAKING CHANGE: <description> ,其它条目应该采用类似 git trailer format[6] 这样的惯例。

其它提交类型在约定式提交规范中并没有强制限制,并且在语义化版本中没有隐式影响(除非它们包含 BREAKING CHANGE)。可以为提交类型添加一个围在圆括号内的范围,以为其提供额外的上下文信息。例如 feat(parser): adds ability to parse arrays.

示例

包含了描述并且脚注中有破坏性变更的提交说明

feat: allow provided config object to extend other configsBREAKING CHANGE: `extends` key in config file is now used for extending other config files
复制代码

包含了 ! 字符以提醒注意破坏性变更的提交说明

feat!: send an email to the customer when a product is shipped
复制代码

包含了范围和破坏性变更 ! 的提交说明

feat(api)!: send an email to the customer when a product is shipped
复制代码

包含了 ! 和 BREAKING CHANGE 脚注的提交说明

chore!: drop support for Node 6BREAKING CHANGE: use JavaScript features not available in Node 6.
复制代码

不包含正文的提交说明

docs: correct spelling of CHANGELOG
复制代码

包含范围的提交说明

feat(lang): add polish language
复制代码

包含多行正文和多行脚注的提交说明

fix: prevent racing of requestsIntroduce a request id and a reference to latest request. Dismiss
incoming responses other than from latest request.Remove timeouts which were used to mitigate the racing issue but are
obsolete now.Reviewed-by: Z
Refs: #123
复制代码

type 类型概览

描述
feat新增一个功能
fix修复一个Bug
docs文档变更
style代码格式(不影响功能,例如空格、分号等格式修正)
refactor代码重构
perf改善性能
test测试
build变更项目构建或外部依赖(例如scopes: webpack、gulp、npm等)
ci更改持续集成软件的配置文件和package中的scripts命令,例如scopes: Travis, Circle等
chore变更构建流程或辅助工具
revert代码回退

为什么需要约定式提交?

Git提交信息需要遵循Angular约定是为了使提交信息格式清晰、易于阅读和理解,从而提高代码协作的效率。Angular约定包括以下三个部分:

  1. 标题(header):用一行简短的描述来总结更改内容,并使用特殊关键字指定更改类型和影响范围。

  2. 正文(body):提供更详细的更改描述,包括更改原因、影响和解决方案等信息。

  3. 页脚(footer):提供一些附加信息,如相关链接、关联的BUG编号等。

通过遵循Angular约定,可以使提交信息更加规范化和易于管理,从而方便其他团队成员阅读和理解更改的含义,从而提高团队协作效率。此外,遵循Angular约定的提交信息还可以更好地与许多自动化工具进行集成,如自动化版本控制、代码审查工具等。

如何遵守约定式提交?

第一步:自动生成提交说明的工具

Commitizen是一个基于命令行的交互式工具,它可以帮助开发者规范化提交Git提交信息,符合Angular Commit Message Conventions的规范,从而更好地管理代码变更历史。

Commitizen提供了一个友好的命令行交互界面,让开发者根据规范选择提交信息的类型、影响范围等内容,自动生成符合规范的Git提交信息。

Commitizen可以与Git结合使用,使得开发者可以使用commitizen命令代替git commit命令提交代码变更,并且生成的提交信息格式更加规范化和易于管理。

这里我建议您全局安装

pnpm install -g commitizen 
pnpm install -g cz-conventional-changelog
复制代码

随后在电脑用户根目录穿件.czrc文件,不然使用的时候会进入命令行(笔者的系统为Ubuntu20.04)

echo '{ "path": "cz-conventional-changelog" }' > ~/.czrc
复制代码

随后使用commitizen生成符合AngularJS规范的提交说明

commitizen init cz-conventional-changelog --save --save-exact
复制代码

随后你就可以使用以下命令获得中规中距的commit信息了。

git cz 
复制代码

第二步:客制化自动提交信息

cz-customizable是Commitizen的一个插件,可以帮助开发者自定义符合Angular Commit Message Conventions的提交信息格式和内容。

拜托,人又不是机器!别那么死板。和代码打交道最重要的事情就是懂得如何苦中作乐,在遇到挑战和困难时,优秀的人能够采取积极的心态,并且能够寻找解决问题的方式和方法。

cz-customizable提供了一些配置选项,让开发者可以根据项目的需要自定义提交信息的格式和内容。

cz-customizable的配置选项包括:

  1. types: 定义提交信息的类型,如feat(新功能)、fix(修复Bug)等。

  2. scopes: 定义提交信息的影响范围,如模块、组件等。

  3. allowCustomScopes: 是否允许自定义影响范围。

  4. scopeOverrides: 定义不同类型的提交信息对影响范围的要求。

  5. messages: 定义提交信息的模板,包括标题、正文、页脚等内容。

  6. allowBreakingChanges: 是否允许提交破坏性变更。

1. 安装 cz-customizable
npm install cz-customizable --save-dev
复制代码
2. 添加以下配置到package.json
"config": {"commitizen": {"path": "node_modules/cz-customizable"}
}
复制代码
3.项目根目录下创建.cz-config.js文件来自定义提示
├── CHANGELOG.md
├── commitlint.config.js
├── index.html
├── node_modules
├── package.json
├── pnpm-lock.yaml
├── public
├── README.md
├── src
├── tsconfig.json
├── tsconfig.node.json
├── vite.config.ts
└── .cz-config.js  // 创建
复制代码
以下是我的一些参考配置
module.exports = {// 可选类型types: [{value: ':sparkles: feat',name: '✨ feat:      新功能'},{value: ':bug: fix',name: '🐛 fix:      修复'},{value: ':memo: docs',name: '📝 docs:      文档变更'},{value: ':lipstick: style',name: '💄 style:     代码格式(不影响代码运行的变动)'},{value: ':recycle: refactor',name: '♻️  refactor:    重构 (既不增加feature, 也不是修复bug)'},{value: ':zap: perf',name: '⚡️ perf:      性能优化'},{value: ':white_check_mark: test',name: '✅ test:      增加测试'},{value: ':wrench: chore',name: '🔧 chore:     构建过程或辅助工具的变动'},{value: ':rewind: revert',name: '⏪ revert:     回退'},{value: ':rocket: build',name: '🚀 build:     打包'}],// 步骤messages: {type: '请选择提交的类型:',customScope: '情输入修改的范围(可选)',subject: '请简要描述提交(必填)',body: '请输入详细描述(可选)',footer: '请输入要关闭的issus(可选)',confirmCommit: '确认要使用以上信息提交?(y/n)'},// 默认长度72subjectLimit: 72
};复制代码

此时再次运行 git cz时就可以看到

? 请选择提交的类型: (Use arrow keys)
❯ ✨ feat:      新功能 🐛 fix:      修复 📝 docs:      文档变更 💄 style:     代码格式(不影响代码运行的变动) ♻️  refactor:    重构 (既不增加feature, 也不是修复bug) ⚡️ perf:      性能优化 ✅ test:      增加测试 
复制代码

第三部:增加对自动生成 commit 信息的校验

有时候你的队友可能是傻逼?请你注意防范

很遗憾的是,上面的操作并没有任何校验功能,你的队友仍然可以提交 trash 在 commit 信息中。如果不敲你是队伍中的审核人员,那么我想你需要设置一些规范

这里我们分情况讨论:

若您没有使用cz-customizable适配器做了破坏Angular风格的提交说明配置,则可以使用以下配置方案

1.安装 @commitlint/config-conventional

npm i @commitlint/config-conventional @commitlint/cli -D
复制代码

2.在根目录创建commitlint.config.js文件,配置commitlint

module.exports = {extends: ['@commitlint/config-conventional']
}
复制代码

若您使用cz-customizable了则需要使用以下配置方案

npm install commitlint-config-cz --save-dev
复制代码
复制代码

然后加入commitlint校验规则配置:

module.exports = {extends: ['cz']
};
复制代码

最后的一些补充

husky 最后的帮手

是一个可以在 Git hooks 中使用的 npm 包,它可以帮助你在特定的 Git 事件发生时执行命令,例如提交代码之前进行代码格式化、测试等操作.

"husky"是一个为了方便使用Git hooks的工具,它能够帮助你在项目中自动化地执行一些Git相关的操作。使用husky,你可以在Git的一些关键操作(例如提交、推送、合并等)前或后,执行一些脚本或命令,比如代码格式化、自动化测试、打包发布等。

他可以帮助我们额外拦截一些如git commit等指令。需要注意的是,husky只在Git仓库中才能正常工作,所以在使用之前请确保你的项目已经初始化为Git仓库

1.安装 husky
  1. 在项目中安装 husky,可以使用 npm或者 yarn 进行安装:
    
pnpm install husky --save-dev
复制代码

或者

yarn add husky --dev
复制代码
2.在package.json中定义需要执行的Git hooks和对应的脚本

例如,在提交代码前执行代码格式化和自动化测试:

jsonCopy code{"husky": {"hooks": {"pre-commit": "npm run lint && npm run test"}}
}
复制代码

这样,每次在执行git commit命令时,都会自动执行npm中定义的linttest命令。

除了pre-commit钩子,husky还支持其他一些Git hooks,比如pre-pushpost-mergepost-checkout等,可以根据实际需求进行配置。

需要注意的是,husky只在Git仓库中才能正常工作,所以在使用之前请确保你的项目已经初始化为Git仓库。

当然 除了在pageage.json中设置之外,还可以使用

npx husky add .husky/pre-commit来生成一个 hook 的文件

随后你也可以在相应的文件中书写要执行的脚本了

./.husky/
├── _
│   └── husky.sh
├── commit-msg
└── pre-commit // 再此写入
复制代码
3.使用lint-staged, 对暂存区代码进行eslint校验和prettier格式化

现在我们已经约束了提交规范,但是我们希望在提交前对当前的代码进行格式验证和修复,此时需要使用到lint-staged

  1. 安装 npm i lint-staged \--save-dev

  2. package.json中新增配置

    "lint-staged": {
    

"/*.scss": "stylelint --syntax scss",  "/.{js,jsx, tsx,ts }": "npm run lint-staged:js",  "**/.{js,jsx,tsx,ts,less,scss,md,json}": [    "prettier --write" ] } 复制代码 复制代码 ```

  1. package.json中新增 lint-staged 和 lint-staged.js 命令

    "scripts": {
    

"lint-staged": "lint-staged",    "lint-staged:js": "eslint --ext .js,.jsx,.ts,.tsx " } 复制代码 复制代码 ```

  1. 最后在 pre-commit中新增脚本

    npm run lint-staged
    复制代码

给大家推荐一款好玩的脑筋急转弯的小程序吧,脑筋急转弯是一种有趣的智力游戏,能够有效锻炼思维能力和创造力。通过巧妙的问题和幽默的答案,它不仅能带来欢乐,还能激发我们的想象力和逻辑思维。无论是与朋友聚会时的互动,还是家庭聚餐中的娱乐,脑筋急转弯都是一种轻松愉快的选择。它适合各个年龄段的人,帮助我们在欢笑中提升智力,增进交流。快来挑战自己,享受脑筋急转弯带来的乐趣吧!V搜小程序:DP去水印助手

最后送大家一句话(来自DP小程序助手语录):光就是羁绊之力,它会再度被某人继承,散发出耀眼的光

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/news/879025.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

蚁剑webshell连接报错A JavaScript error occurred in the main process

报错如图&#xff1a; 已知解决方式&#xff1a; 将上传shell中文文件名修改为任意的英文文件名即可连接。

uniapp对tabbar封装,简单好用

第一种&#xff0c;效果展示 上代码&#xff0c;新建一个公用组件&#xff0c;tabbar.vue <template><view class"tabbar"><view class"tabbar-item" click"tabbarbtn(0)"><image class"item-image" v-if"…

Unreal Fest 2024 虚幻引擎影视动画制作的普遍问题

一 毛发缓存数据巨大的问题&#xff08;及5个解决方案&#xff09; 在引擎里模拟毛发&#xff0c;并且把它缓存下来&#xff0c;我们就不需要从外部导入了&#xff0c;所以我们要解决的问题就是怎么样在引擎里自由地控制毛发 1.物理场控制 延申 [技术分享]《UE中的世界物理场…

第三天旅游线路预览——从贾登峪到禾木风景区入口

第三天&#xff1a;从贾登峪到禾木风景区&#xff0c;晚上住宿贾登峪&#xff1b; 从贾登峪到禾木风景区入口&#xff1a; 1&#xff09;早上9&#xff1a;00起床&#xff0c;吃完早饭&#xff0c;9&#xff1a;30出发&#xff1b; 2&#xff09;从贾登峪到禾木景区售票厅&am…

CSDN文章无水印转成PDF

文章目录 一、打开检查二、点击进入控制台三、在控制台中输入代码 一、打开检查 f11或者右键打开检查 二、点击进入控制台 三、在控制台中输入代码 (function(){ use strict;var articleBox $("div.article_content");articleBox.removeAttr("style&quo…

云计算之大数据(上)

目录 一、Elasticsearch 1.1 产品组件 1.1.1 X-Pack 1.1.2 Beats数据采集中心 1.1.3 Logstash 1.1.4 Kibana 1.2 架构特性 1.2.1 性能 1.2.2 安全性 1.2.3 可用性 1.2.4 可扩展性 1.2.5 可维护性 1.2.6 国际化 1.3 综合检索分析 1.4 全观测 1.5 大数据检索加速…

斑马鱼的超级大脑,光学脑机接口能否解锁生物行为的终极控制?

今天&#xff0c;让我们一起走进一个令人兴奋的科学领域——光学脑机接口&#xff0c;看看科学家们是如何通过这项技术&#xff0c;首次实现了对斑马鱼全脑活动的实时监控和控制。 从科幻到现实的一步之遥 想象一下&#xff0c;如果能够直接读取和影响生物大脑的神经活动&#…

K8S 发布应用

前言 昨儿个用 unbuntu20.04 又装了一次K8S 用的 kubeadm containerd Cilium (CNI) 又重新撸了一遍 这里只记录 应用发布的笔记 正文 #创建deployment kubectl create deployment nginx --imagenginx #我这边大约30秒后显示为 ready kubectl get deployments kubectl desc…

3GPP协议入门——物理层基础(一)

1. 频段/带宽 NR指定了两个频率范围&#xff0c;FR1&#xff1a;通常称Sub 6GHz&#xff0c;也称低频5G&#xff1b;FR2&#xff1a;通常称毫米波&#xff08;Millimeter Wave&#xff09;&#xff0c;也称高频5G。 2. 子载波间隔 NR中有15kHz&#xff0c;30kHz&#xff0c;6…

基于微信小程序的人才招聘系统的设计与实现

作者&#xff1a;计算机学姐 开发技术&#xff1a;SpringBoot、SSM、Vue、MySQL、JSP、ElementUI等&#xff0c;“文末源码”。 专栏推荐&#xff1a;前后端分离项目源码、SpringBoot项目源码、SSM项目源码 系统展示 基于微信小程序JavaSpringBootVueMySQL的人才招聘系统的设计…

Springboot整合websocket(附详细案例代码)

文章目录 WebSocket简述WebSocket是什么&#xff1f;WebSocket 的特点WebSocket 的工作流程WebSocket的消息(帧)格式WebSocket 与 HTTP springboot中整合WebSocketpom依赖实体类配置类握手配置类WebSocket配置类 自定义异常类webSocket服务类websocket中Session的 getBasicRemo…

【第25章】Spring Cloud之Sentinel控制台详解

文章目录 前言一、实时监控二、簇点链路三、流控规则四、熔断规则五、热点规则六、系统规则七、授权规则八、集群流控九、机器列表总结 前言 前面我们详细介绍了Sentinel控制台的安装过程&#xff0c;这里我们来了解各个菜单的功能作用。 一、实时监控 同一个服务下的所有机器…

Docker 安装配置 RocketMq (带代码和可视化界面) 一文搞定

Docker 安装配置 RocketMq 前言RocketMq拆解和分析前置内容1、NameServer2、Broker2、可视化界面SpringBoot RocketMq 实战(后续有需求再继续) 前言 本文着重于基于Docker 安装 RocketMq &#xff0c;默认是有 JAVA和 Docker 环境的&#xff0c;如无 基础&#xff08;java do…

启动spring boot项目时,第三方jar包扫描不到的问题

讲述一下遇到的问题&#xff1a; 在启动类Application上使用ComponentScan 这个注解来扫描第三方的包&#xff0c;然后就会出现报错。异常就是无法加载本地的bean&#xff0c;但是可以加载到第三方的bean&#xff1b; 了解过spring boot启动流程的都知道&#xff0c;Springboo…

局域网远程桌面工具:NoMachine 介绍、安装与使用

局域网远程桌面工具&#xff1a;NoMachine 介绍、安装与使用 NoMachine 简介Linux 安装Windows安装使用 NoMachine 简介 NoMachine是一款很常见的远程桌面工具&#xff0c;尤其在EDA领域&#xff0c;常常被用作远程接入方案。NoMachine可以用于个人远程连接&#xff0c;类似于…

计算机网络:http协议

计算机网络&#xff1a;http协议 一、本文内容与前置知识点1. 本文内容2. 前置知识点 二、HTTP协议工作简介1. 特点2. 传输时间分析3. http报文结构 三、HTTP版本迭代1. HTTP1.0和HTTP1.1主要区别2. HTTP1.1和HTTP2主要区别3. HTTPS与HTTP的主要区别 四、参考文献 一、本文内容…

Kafka【十三】消费者消费消息的偏移量

偏移量offset是消费者消费数据的一个非常重要的属性。默认情况下&#xff0c;消费者如果不指定消费主题数据的偏移量&#xff0c;那么消费者启动消费时&#xff0c;无论当前主题之前存储了多少历史数据&#xff0c;消费者只能从连接成功后当前主题最新的数据偏移位置读取&#…

【贪心算法】区间类算法题(整数替换、俄罗斯套娃、重构字符串等、C++)

文章目录 1. 前言2. 算法题1.整数替换2.俄罗斯套娃信封问题3.可被三整除的最大和4.距离相等的条形码5.重构字符串 1. 前言 贪心算法&#xff08;Greedy Algorithm&#xff09;是一种在每一步选择中都采取当前状态下最优决策的算法。贪心算法通常用来解决最优化问题&#xff0c…

Elasticsearch数据写入过程

1. 写入请求 当一个写入请求&#xff08;如 Index、Update 或 Delete 请求&#xff09;通过REST API发送到Elasticsearch时&#xff0c;通常包含一个文档的内容&#xff0c;以及该文档的索引和ID。 2. 请求路由 协调节点&#xff1a;首先&#xff0c;请求会到达一个协调节点…

大数据决策分析平台建设方案(可编辑的56页PPT)

引言&#xff1a;在当今信息爆炸的时代&#xff0c;大数据已成为企业决策制定、业务优化与市场洞察的重要驱动力。为了充分挖掘大数据的潜在价值&#xff0c;提升决策效率与精准度&#xff0c;构建一套高效、灵活、可扩展的大数据决策分析平台显得尤为重要。通过大数据分析平台…