侧边栏壁纸
博主头像
玄近安

抬猪高手,略懂代码

  • 累计撰写 9 篇文章
  • 累计创建 9 个标签
  • 累计收到 0 条评论

目 录CONTENT

文章目录
Git

规范Git-Commit-Message

玄近安
2021-06-12 / 0 评论 / 0 点赞 / 16 阅读 / 0 字

前言

git想必大家都不陌生,基本上是作为现代开发的必备工具之一。代码同步快捷方便,分支无缝切换,在代码管理上无出其右。
然而你用的有多爽,代价就有多痛。
想当年大片大片的no message,update,commit,那也是相当壮观,找个代码花点时间那也不在话下。
但是随着前端越来越趋近工程话,一个项目也不在是一个人的事,协同开发,模块开发,已是大势所趋。
既然要协同要分离甚至是组合,那对于你单次提交内容的准确性,要求就越来越高。你需要将你写了什么代码什么功能,及哪个版本,具体做了什么,都得写上,以便他人合并或者分离你的代码,进行开发。
因此设计一个合理的适合自己项目的规范,就势在必行。
前端的message规范方面网上有很多,我就不再赘述。
本篇主要讲怎么一步一步设计自己项目的message规范。

统一提交格式

首先统一git的基础提交格式
<type>(<scope>): <subject>

关于git commit message的相关格式规范网上有很多,这里参考Angular提交规范
参考:Angular提交规范(英文原文档) 【翻译】AngularJS Git 提交信息规范

原理

使用 git 强制校验提交的 message 是否符合规范,我们使用 git hooks 能力来限制提交,主要使用 commit-msg 钩子。

主要工具

使用安装

第一步

## 安装 commitlint 相关
npm install --save-dev @commitlint/cli @commitlint/config-conventional

第二步

## 安装husky
npm install husky --save-dev
## or
yarn add husky --dev

第三步

## 激活hooks
npx husky install
## or
yarn husky install

第四步
项目根目录创建commitlint 配置文件(commitlint.config.js)
这里是规范配置最关键的部分,相关规则细节都可以在官网上找到,可以根据这个配置规则来设计自己的规范。

/**
 * commitlint.config.js
 * 详细配置规则参考
 * 规则解析:
 * https://github.com/conventional-changelog/commitlint/blob/master/docs/reference-rules.md
 * 完整规则示例:
 * https://github.com/conventional-changelog/commitlint/blob/master/@commitlint/config-conventional/index.js
 */
module.exports = {
  extends: ["@commitlint/config-conventional"],
  rules: {
    /**
     * subject加上英文大小写规范限制
     * - 禁止使用'sentence-case', 'start-case', 'pascal-case', 'upper-case'
     * ep:
     * 'subject-case': [
     *      2,
     *      'never',
     *      ['sentence-case', 'start-case', 'pascal-case', 'upper-case'],
     * ]
     * - 解除限制
     * ep:
     * 'subject-case': [0]
     */
    "subject-case": [0],
    /**
     * scope是否允许为空
     *
     * - scope不允许为空
     * ep:
     * 'scope-empty': [2, 'never']
     *
     * - scope允许为空
     * ep:
     * 'scope-empty': [0]
     */
    "scope-empty": [2, "never"],
    /**
     * type类型限定
     * - 只允许feat,fix,docs类型
     * ep:
     * 'type-enum': [
     *   2,
     *   'always',
     *   [ 'feat','fix', 'docs',]
     * ]
     */
    "type-enum": [
      2,
      "always",
      [
        "feat",
        "fix",
        "docs",
        "style",
        "refactor",
        "perf",
        "test",
        "chore",
        "revert",
        "merge",
        "sync",
      ],
    ],
  },
};

在.husky目录下创建 commit-msg 文件(.husky/commit-msg)

#!/bin/sh
. "$(dirname "$0")/_/husky.sh"
npx --no-install commitlint --edit $1

测试

最后测试 commitlint 规范是否生效

##生成项目以前提交中的问题
npx commitlint -- --from HEAD~1 --to HEAD --verbose

如果安装成功,输出大致如下(如果存在不符合规范的commit message)

...
⧗   input: Initial commit
✖   subject may not be empty [subject-empty]
✖   type may not be empty [type-empty]
✖   scope may not be empty [scope-empty]
✖   found 1 problems, 0 warnings

ⓘ   Get help: https://github.com/conventional-changelog/commitlint/#what-is-commitlint

…

安装完成即会对该项目下的git提交,都进行message规范校验。

说明

  • 主要使用commitlint来做规则制定,更多详细文档,见官网

  • 不要使用以下官网代码来生成配置文件,在window下会有编码格式问题
    echo "module.exports = { extends: ['@commitlint/config-conventional'] };" > commitlint.config.js

  • 不要使用husky生成commit-msg文件
    npx husky add .husky/commit-msg 'npx --no-install commitlint --edit $1

0

评论区