编写优雅的 commit message 并自动生成 changelog
时间:2022-07-24
本文章向大家介绍编写优雅的 commit message 并自动生成 changelog,主要内容包括其使用实例、应用技巧、基本知识点总结和需要注意事项,具有一定的参考价值,需要的朋友可以参考一下。
commit message 规范
http://www.ruanyifeng.com/blog/2016/01/commit_message_change_log.html
自动校验 commit message
参考:https://github.com/conventional-changelog/commitlint
- 安装依赖
npm install -D @commitlint/{config-conventional,cli} husky
- 在 package.json 添加 commitlint 配置和 git hook
"husky": {
"hooks": {
"commit-msg": "commitlint -E HUSKY_GIT_PARAMS"
}
},
"commitlint": {
"extends": [
"@commitlint/config-conventional"
]
}
- 提交 commit 触发校验
通过交互界面生成符合规范的 commit message
- 安装依赖
npm install -D commitizen cz-conventional-changelog
- 在 package.json 中新增一条 script
"scripts": {
...
"commit": "git-cz"
}
- 在 package.json 添加 commitizen 配置
"config": {
"commitizen": {
"path": "node_modules/cz-conventional-changelog"
}
}
- 执行
git add .
和npm run commit
image
自动生成 changelog
参考:https://github.com/CookPete/auto-changelog
- 安装依赖
npm install -D auto-changelog
- 创建配置文件 .auto-changelog
{
"template": "CHANGELOG.template",
"unreleased": true,
"commitLimit": false
}
-
创建自定义 changelog 模板 CHANGELOG.template.**注意替换组名和仓库名**
# Changelog
{{#each releases}}
## [{{title}}]
{{#commit-list commits heading='### Breaking Change' message='[break]'}}
- {{subject}} [{{shorthash}}]({{href}})
{{/commit-list}}
{{#commit-list commits heading='### New Feature' message='feat: ' exclude='[break]'}}
- {{subject}} [{{shorthash}}]({{href}})
{{/commit-list}}
{{#commit-list commits heading='### Bug Fix' message='fix: ' exclude='[break]'}}
- {{subject}} [{{shorthash}}]({{href}})
{{/commit-list}}
{{/each}}
- 在 package.json 中新增 script
"scripts": {
...
"changelog": "auto-changelog",
"version": "auto-changelog -p && git add CHANGELOG.md"
}
- 执行
npm run changelog
执行npm version
时会自动生成带所发布版本号的 changelog
- Enterprise Library深入解析与灵活应用(7):再谈PIAB与Unity之间的集成
- ASP.NET MVC5+EF6+EasyUI 后台管理系统(39)-在线人数统计探讨
- ASP.NET MVC5+EF6+EasyUI 后台管理系统(37)-文章发布系统④-百万级数据和千万级数据简单测试
- .Net 转战 Android 4.4 日常笔记(10)--PullToRefresh下拉刷新使用
- .Net 转战 Android 4.4 日常笔记(10)--ADT集成环境更新SDK
- Windows Server 2008R2 配置网络负载平衡(NLB)
- .Net 转战 Android 4.4 日常笔记(9)--常用组件的使用方法[附源码]
- ASP.NET MVC5+EF6+EasyUI 后台管理系统(38)-Easyui-accordion+tree漂亮的菜单导航
- .Net 转战 Android 4.4 日常笔记(8)--常见事件响应及实现方式
- silverlight于javascript通信
- 微信上线小游戏:对流量基础入口应用商店革命
- Appium Desktop 使用
- ASP.NET MVC5+EF6+EasyUI 后台管理系统(36)-文章发布系统③-kindeditor使用
- Windows Server 2008 R2 下配置证书服务器和HTTPS方式访问网站
- JavaScript 教程
- JavaScript 编辑工具
- JavaScript 与HTML
- JavaScript 与Java
- JavaScript 数据结构
- JavaScript 基本数据类型
- JavaScript 特殊数据类型
- JavaScript 运算符
- JavaScript typeof 运算符
- JavaScript 表达式
- JavaScript 类型转换
- JavaScript 基本语法
- JavaScript 注释
- Javascript 基本处理流程
- Javascript 选择结构
- Javascript if 语句
- Javascript if 语句的嵌套
- Javascript switch 语句
- Javascript 循环结构
- Javascript 循环结构实例
- Javascript 跳转语句
- Javascript 控制语句总结
- Javascript 函数介绍
- Javascript 函数的定义
- Javascript 函数调用
- Javascript 几种特殊的函数
- JavaScript 内置函数简介
- Javascript eval() 函数
- Javascript isFinite() 函数
- Javascript isNaN() 函数
- parseInt() 与 parseFloat()
- escape() 与 unescape()
- Javascript 字符串介绍
- Javascript length属性
- javascript 字符串函数
- Javascript 日期对象简介
- Javascript 日期对象用途
- Date 对象属性和方法
- Javascript 数组是什么
- Javascript 创建数组
- Javascript 数组赋值与取值
- Javascript 数组属性和方法
- Android碎片fragment实现静态加载的实例代码
- android异步消息机制 源码层面彻底解析(1)
- /undefinedcss/modules/layer/default/layer.css?v=3.1.1找不到的问题
- Android实现渐变启动页和带有指示器的引导页
- the input device is not a TTY. If you are using mintty, try prefixing the comma
- 【STM32F407】第13章 RL-TCPnet V7.X之创建多个TCP客户端
- RecyclerView实现列表倒计时
- wsl设置默认账户为root(ubuntu18.04)
- LeetCode No.14 最长公共前缀
- android异步消息机制 从源码层面解析(2)
- beego解决跨域问题:options请求、axios post请求跨域问题
- Android ListView列表实现倒计时
- [-Flutter 自组篇-] 蛛网图+绘制+动画实践
- Kotlin类型系统竟如此简单
- 以人为本 | Android 11 的消息通知