git提交规范 commitLint

7,010 阅读4分钟

提交规范

上半篇,直接快速讲解配置使用,下半场番外篇 commit-msg,良好的提交规范可以清晰管理版本与每一次提交,接下来浪我们在前端的项目中安装并执行吧

commitlint

相信大家目前项目都是运行在node平台上的vue/react/angl项目 1、不多说先安装下面三件套

启动执行插件
yarn add || npm install husky --dev
commitlint核心执行文件 安装项目开发环境
yarn add || npm install @commitlint/cli --dev
commitlint自定义配置文件 安装项目开发环境
yarn add || npm install @commitlint/config-conventional --dev

2、安装好了,怎么配置怎么用 一)配置package.json,增一个执行对象,有的话修改

"husky": {
    "hooks": {
      "pre-commit": "lint-staged",
      "commit-msg": "commitlint -E HUSKY_GIT_PARAMS"
    }
  },

二)在根目录创建commitlint.config.js文件

module.exports = {
    extends: ['@commitlint/config-conventional'],
    rules: {
        'body-leading-blank': [2, 'always'], // body换行
        'header-max-length': [2, 'never', 72], // header 最长72
        'type-enum': [
            2,
            'always',
            [
                'add', // 创建功能
                'del', // 删除功能
                'fix', // 解决问题
                'bump', // 修改某个版本号
                'conf', // 配置文件修改
                'refactor', // 必须进行重构的代码
                'reformat', // 代码格式化
                'optimize', // 代码性能优化
                'doc', // 文档构建与修改
                'start', // 开始做某事,比如创建分支等
                'end' // 结束做某事,比如删除分支等
            ]
        ]
    }
}

三)提交格式

  • Commit message格式,注意冒号后面有空格
<type>: <subject>
换行
<body>
换行
<footer>
  • 规则参数问题
'xxxxx': [级别,适用,值]

规则由名称和配置数组组成。配置数组包含: 级别 [0..2]:0禁用规则。因为1它将被视为2错误警告。 适用 always|never:never颠倒规则。 值:用于此规则的值。

四)快乐的提交吧!

创建分支篇

请细品语雀git提交规范 常见三类分支创建规范(详情见上面链接)

  • feature_xxx 功能
  • release 提测标准分支 提测请打tag
  • hotfix_xxx 热修复分支

番外篇

  • 另外配置方案 一、创建.commitlintrc.js,.commitlintrc.json或者.commitlintrc.yml 二、package.json中配置commitlint对象(没试过) 三、其他配置选项(文档不多)
        'type-empty': [2, 'never'], // <type> 不能为空
        'type-case': [2, 'always', 'lower-case'], // <type>格式小写
        'scope-empty': [2, 'never'], // <scope> 不能为空
        'scope-case': [2, 'always', 'lower-case'], // <scope> 格式 小写
        'subject-empty': [2, 'never'], // <subject> 不能为空
        'subject-full-stop': [2, 'never', '.'], // <subject> 以.为结束标志
        // <subject> 格式
        // 可选值
        // 'lower-case' 小写 lowercase
        // 'upper-case' 大写 UPPERCASE
        // 'camel-case' 小驼峰 camelCase
        // 'kebab-case' 短横线 kebab-case
        // 'pascal-case' 大驼峰 PascalCase
        // 'sentence-case' 首字母大写 Sentence case
        // 'snake-case' 下划线 snake_case
        // 'start-case' 所有首字母大写 start-case
        'subject-case': [2, 'never', []],
        'body-leading-blank': [2, 'always'], // body换行
        'footer-leading-blank': [1, 'always'], // <footer> 以空行开头
        'header-max-length': [2, 'never', 72], // header 最长72

四、快乐自定义快捷命令,enen还是不搞啦,大家还是认真按规范提交吧(有兴趣可以查查哦)

初期问题篇

修改.git文件配置commit文件,日志,用户使用,维护等问题
斜杠分割确实是文件夹,改用_(原因-母鸡)
#开头问题,vim编辑器默认#开头,一、commitlint插件会滤掉#并报错,二、解析header时候正则不允许并报错,so:rule中特殊符号不要轻易添加

就因为一个#,我就很好奇怎么配置不了,我这暴脾气,强改规则重新发包(可惜挂在半路),本地改完确实#号啊,其他的都可以改,最后git提交成功 一)第一步打开node_modules,第一眼看去就是@commitlint文件夹,点开,我***,怎么这么多东西,随便点了点,层层依赖,套麻花呢,我是谁,我哪里? 二)怎么看呢,想了想,他的配置规则key是’type-enum‘,行就你了,全局搜,开门啦,在他js文件中,node控制台打印header,我输入的是#add,你怎么输出null,层层看他的数据走向(差点都不想看啦,不过看人家写的js,思路思想还是挺有意思的),走着走着走到最外层发现还是打印null,我吐了,怎么输入进来,还没规则判断就是null 三)在最外层打印null的旁边,定眼一看,还有个外部依赖的解析包,牛皮,走出@commutlint,在node_modules中最后发现三兄弟

  • conventional-changelog-angular angl 规范的东西不管
  • conventional-changelog-conventionalcommits 忘了这啥
  • conventional-commits-parser 就是你这个瓜皮
输入 #add
正则 headerPattern: /^(\w*)(?:\(([\w$.\-* ]*)\))?: (.*)$/,
^(\w*) 抬走下一个

这个npm包,将你输入的commitlint部分信息,进行拆分形成 key:value,然后给@commitlint

流程
@commitlint/cli --- 依赖@commitlint/lint
@commitlint/lint --- 依赖@commitlint/parse
@commitlint/parse --- 依赖 conventional-commits-parser