当前位置:   article > 正文

git提交规范_commitlint prompt

commitlint prompt

我们使用husky检测git钩子,lint-staged规范化暂存区代码,commitlint规范化提交信息。

1 git钩子介绍

Git 有很多的 hooks, 让我们在不同的阶段,对代码进行不同的操作,控制提交到仓库的代码的规范性,和准确性, 以下只是几个常用的钩子

git钩子

描述

pre-commit

判断提交的代码是否符合规范

commit-msg

判断 commit 信息是否符合规范

pre-push

执行测试,避免对以前的内容造成影响

2 工具介绍

  • husky:操作git钩子的工具
  • lint-staged:本地暂存代码检查工具
  • commitlint:提交信息校验工具
  • commitizen:辅助提交信息 ,全局安装后可以使用cz命令,选项式提交git

3 安装和配置

3.1 husky

官方文档

yarn add -D husky lint-staged

package.json中添加脚本

npm set-script prepare "husky install"

初始化husky,将git hooks钩子交由,husky执行。会在根目录创建 .husky 文件夹

yarn prepare

3.2 lint-staged

检测pre-commit钩子,执行 npx lint-staged 指令

npx husky add .husky/pre-commit "npx lint-staged"

lint-staged配置

可以在根目录创建 .lintstagedrc.json文件控制检查和操作方式

  1. {
  2. "*.{js,jsx,ts,tsx}": ["prettier --write", "eslint --fix"],
  3. "*.{css,json,md,less,scss}": ["prettier --write"]
  4. }

也可以在package.json中配置:

  1. {
  2. "lint-staged": {
  3. "*.{js,jsx,ts,tsx}": ["prettier --write", "eslint --fix"],
  4. "*.{css,json,md,less,scss}": ["prettier --write"]
  5. }
  6. }

3.3 commitlint

官网

  1. yarn add -D commitlint
  2. npx husky add .husky/commit-msg 'npx --no-install commitlint --edit "$1"'

添加配置文件commitlint.config.js

  1. // commitlint.config.js
  2. /** @type {import('cz-git').UserConfig} */
  3. module.exports = {
  4. rules: {
  5. // @see: https://commitlint.js.org/#/reference-rules
  6. // 配置规则:
  7. // 每个配置是一个个键值对,键值是array类型:
  8. // 第一个参数表示:重要等级,0表示关闭规则,1表示warning,2表示error
  9. // 第二个参数表示:应用与否,always | nerver
  10. // 第三个参数表示:配置规则的值
  11. // commit message的结构如下:
  12. // <type>[optional scope]: <description>
  13. // [optional body]
  14. // [optional footer(s)]
  15. // 简短描述(subject)
  16. // 详细描述(body)
  17. 'body-leading-blank': [1, 'always'], // body开头空行
  18. 'body-max-line-length': [2, 'always', 100], // body最大内容长度
  19. 'footer-leading-blank': [1, 'always'], // footer开头空行
  20. 'footer-max-line-length': [2, 'always', 100], // footer最大内容长度
  21. 'header-max-length': [2, 'always', 100], // header最大长度
  22. // subject单词格式
  23. 'subject-case': [
  24. 2,
  25. 'never',
  26. ['sentence-case', 'start-case', 'pascal-case', 'upper-case'],
  27. ],
  28. 'subject-empty': [2, 'never'], // subject是否为空
  29. 'subject-full-stop': [2, 'never', '.'], // subject中止符
  30. 'type-case': [2, 'always', 'lower-case'], // type单词格式
  31. 'type-empty': [2, 'never'], // type是否为空
  32. // type可选值
  33. 'type-enum': [
  34. 2,
  35. 'always',
  36. [
  37. 'release',
  38. 'build',
  39. 'update',
  40. 'docs',
  41. 'add',
  42. 'fix',
  43. 'perf',
  44. 'refactor',
  45. 'revert',
  46. 'style',
  47. 'test',
  48. ],
  49. ],
  50. },
  51. prompt: {
  52. alias: {
  53. fd: 'docs: :memo: 文档更新',
  54. uv: 'release: :bookmark: update version',
  55. },
  56. messages: {
  57. type: '选择你要提交的类型 :',
  58. scope: '选择一个提交范围(可选):',
  59. customScope: '请输入自定义的提交范围 :',
  60. subject: '填写简短精炼的变更描述 :\n',
  61. body: '填写更加详细的变更描述(可选)。使用 "|" 换行 :\n',
  62. breaking: '列举非兼容性重大的变更(可选)。使用 "|" 换行 :\n',
  63. footerPrefixsSelect: '选择关联issue前缀(可选):',
  64. customFooterPrefixs: '输入自定义issue前缀 :',
  65. footer: '列举关联issue (可选) 例如: #31, #I3244 :\n',
  66. confirmCommit: '是否提交或修改commit ?',
  67. },
  68. types: [
  69. {
  70. value: 'add',
  71. name: 'add: ✨ 新增功能',
  72. emoji: ':sparkles:',
  73. },
  74. {
  75. value: 'update',
  76. name: 'update: 本文内容由网友自发贡献,转载请注明出处:https://www.wpsshop.cn/w/Li_阴宅/article/detail/944018
    推荐阅读
    相关标签