还在为多人协作git commit不规范而烦恼吗😄看看这篇🔥

1,331 阅读3分钟

哈喽,我是JL😄

共同成长是我一直以来的追求!✨

希望下面分享能让你有所收获💦

背景

git作为目前最流行的开源的分布式版本控制系统,用于敏捷高效地处理任何或小或大的项目。

目前公司主流版本管理都在使用git,或者svn,但是git由于其分布式的特性,同时支持离线本地工作,即使操作相对于svn繁杂一些,但也不妨碍大众的推崇。

但是随着项目的扩大,一个项目可能由多人进行开发,每个人的代码风格又有区别,如何做到git规范管理是一个比较常见的问题。

要知道git 规定提交时必须要写提交信息,作为改动说明,保存在 commit 历史中,方便回溯。规范的 log 不仅有助于他人 review, 还可以有效的输出 CHANGELOG,甚至对于项目的研发质量都有很大的提升。

Commitlint 是什么?

在多人开发的情况下,git 仓库和 workflow 的作用很重要。而对于commit提交的信息说明存在一定规范,使用 commitlint + husky 规范git commit -m ""中的描述信息。

简单来说,就是当我们运行`git commmit -m 'xxx'`时,用来硬性**检查`xxx`是否满足固定格式的工具。

如何和谐嵌入日常项目中(适用Vue-cli项目)

步骤很简单:

  1. 直接通过命令安装:vue add commitlint,提示是否添加commitlint插件? Yes

  2. 如何判断安装成功?

    安装完后,根目录出现配置文件commitlint.config.js,或者.commitlintrc.js

    package.json文件出现以下代码:

impicture_20220317_200325.png

则代表安装成功

  1. commitlint.config.js添加rules
// commitlint.config.js 
module.exports = {
  extends: [ "@commitlint/config-conventional"], // 自带
  rules: {
    "type-enum": [
      2,
      "always",
      [
        'build', // 修改构建打包文件
        'chore', // 构建过程或辅助工具的变动
        'docs', // 文档(documentation)
        'feat', // 新功能(feature)
        'fix', // 修补bug
        'perf', // 性能优化
        'refactor', // 重构(即不是新增功能,也不是修改bug的代码变动)
        'revert', // 还原以前的提交
        'style', // 格式(不影响代码运行的变动)
        'test' // 增加测试
      ],
    ],
    "type-case": [0],
    "type-empty": [0],
    "scope-empty": [0],
    "scope-case": [0],
    "subject-full-stop": [0, "never"],
    "subject-case": [0, "never"],
    "header-max-length": [0, "always", 72],
  },
};

当然,更多规则可以自行了解官方文档

效果图

impicture_20220317_204510.png

可谓,硬性插入,不规范都提交代码了!真香~🤦‍♂️

Commmit规范

现在市面上比较流行的方案是约定式提交规范Conventional Commits),它受到了Angular提交准则的启发,并在很大程度上以其为依据:

格式: <类型>[可选的作用域]: <描述>      // 注意冒号后面需要空格
类型:
    'build', // 修改构建打包文件
    'chore', // 构建过程或辅助工具的变动
    'docs', // 文档(documentation)
    'feat', // 新功能(feature)
    'fix', // 修补bug
    'perf', // 性能优化
    'refactor', // 重构(即不是新增功能,也不是修改bug的代码变动)
    'revert', // 还原以前的提交
    'style', // 格式(不影响代码运行的变动)
    'test' // 增加测试

遇到问题

1. lint失效

一般在初始化项目时候,vue-cli已经帮我们配置好lint-staged,当我们git commit时候,项目会帮我们先执行npm run lint,避免一些错误commit。

但是装了Husky后(装了commitLint会自动安装husky),lint-staged失效了,原因推测是Husky作为Git hooks 工具. 对git执行的一些命令,通过对应的hooks钩子触发,执行自定义的脚本程序,所以将原先钩子转到了Husky上,经试验,可以将原gitHooks上的pre-commit复制到husky下面的hooks上

"gitHooks": { 
    "pre-commit": "lint-staged"
}, 
"husky": {  // 初始化时候是没有的
    "hooks": { 
        "commit-msg": "commitlint -E HUSKY_GIT_PARAMS", // 装了commitlint后
        "pre-commit": "lint-staged", // 失效添加将lint-staged添加到这里
    }
}, 
"lint-staged": { 
    "src/**/*.{js,vue}": [ "npm run lint" ]
},

结语

希望能给你带来帮助✨~

分享不易,点赞鼓励咯🤞