【社畜自救指北】 基建篇01:统一成员git提交规范以及代码提交检测

925 阅读5分钟

持续创作,加速成长!这是我参与「掘金日新计划 · 6 月更文挑战」的第2天,点击查看活动详情

背景

再用git作为代码版本管理的时候,同学们可能会遇到这么一种情况,就是提交记录千奇百怪,什么格式的都有,如果很不幸,你是个接盘侠,或者需要对项目进行管理复盘,想必把其他程序猿祭天的心思都有了。

可能有这么几个场景:

  • 提交信息模糊,比如写了个【解决bug】,就很让人迷惑(黑人问号脸)。
  • 后期需要定位某个bug的修复记录,基本找不到。茫茫提交记录里面去捞吧,这个也可以视为和issue的联动。

image.png

简而言之 :不规范的提交说明无法让其他的同学快速得知项目的变化,也获取不到任何有效信息,这对接手或者项目管理的同学打击很大ORZ。

Angular提交规范

示例

我们可以直接利用已有的Angular提交规范。 先来看下正面例子并简单分析下。


fix(types): support string type for style in VNode data (#9728)
----------------以这条为例-----------------
fix 说明是修复bug
(types) 作用域
support string type for style in VNode data: 文件描述
(#9728) 对应的issue。 可以直接跳转到本项目的特定issue下面

语法

我们先来看下基本的语法规则:

<type>(<scope>): <subject>
# 空一行
<body>
# 空一行
<footer>

Header

  • type:用于说明commit的提交类型,必选
  • scope:用于说明commit的影响范围,可选
  • subject:用于说明commit的细节描述,可选

type必选:commit的提交类型。倒也不用特定的去记忆,后续我们会使用vscode自带的插件来辅助我们提交。

类型功能描述
feat功能新增功能
fix修复修复缺陷,修复上一版本存在问题
docs文档更新文档,仅修改文档不修改代码
style样式变动格式,不影响代码逻辑
refactor重构重构代码,非新增功能也非修改缺陷
perf性能优化性能,提高代码执行性能
test测试新增测试,追加测试用例验证代码
build构建更新构建,修改构建工具或外部依赖
ci脚本更新脚本,修改CI或执行脚本配置
chore事务变动事务,修改其他不影响代码的事务
revert回滚回滚版本,撤销某次代码提交
merge合并合并分支,合并分支代码到其他分支
sync同步同步分支,同步分支代码到其他分支
impr改进改进功能,升级当前功能模块

scope可选: commit的影响范围。举个栗子可以按架构类型来分,比如业务层代码,视图层代码。这个需要根据同学们的项目特色来制定,可以按架构,也可以按照交互行为,或者是功能。虽然是可选,还是建议大家写上。

subject可选:commit的细节描述。简单的概述,尽量一句话能说明你的意图。具体的小作文可以放在body之中。尽量以动词开头,即声明了【我】做了写什么事情。 同时不以符号结尾。

例如:【feat(api): 新增日活埋点接口xxx】

Body(正文)

这个部分就是能写多详细就写多详细。可以尽量阐述的你的意图和代码需要注意的点。

例如:修改了一个记录用户日活失败的bug。这边就可以阐述bug的产生原因和解决办法。

Footer(脚注)

该部分只适用两种情况,分别是不兼容变动问题关闭

  • 不兼容变动:当前代码与上一版本不兼容,则以BREAKING CHANGE开头,关联变动描述变动理由迁移方法
  • 问题关闭:当前代码已修复某些Issue,则以Closes开头,关联目标Issue

例如: Close #9527

解决方案

Commitlint

安装插件

npm install --save-dev @commitlint/config-conventional @commitlint/cli

在项目的根目录创建.commitlintrc.js文件

module.exports = {
  extends: [
    "@commitlint/config-conventional"
  ]
};

接下来为 git 配置 husky ,对 git 的 commit 操作进行校验husky继承了Git下所有的钩子,在触发钩子的时候,husky可以阻止不合法的commitpush

npm install husky --save-dev

package.json 中引入 husky


// package.json
{
  "husky": {
    "hooks": {
      "commit-msg": "commitlint -E HUSKY_GIT_PARAMS"
    }  
  }

提交代码的时候触发钩子,执行 commitlint -E HUSKY_GIT_PARAMS命令,然后读取commitlint.config.js的配置,如果检测不通过的话会中止提交并报错。

以上就是关于提交信息规范的配置,除此之外呢,我们还可以借助husky这个钩子对要提交的代码文件进行校验等操作。

lint-staged

安装

npm i --D lint-staged

package.json 中引入 husky的其他配置

  "husky": {
    "hooks": {
      "pre-commit": "lint-staged",
      "commit-msg": "commitlint -E HUSKY_GIT_PARAMS"
    }
  },
  "lint-staged": {
    "**/*.{js,jsx,vue,ts,tsx}": [
      "cross-env NODE_ENV=development vue-cli-service lint"
    ]
  }

说明: 这里 lint-staged 的配置是:在 git 的待提交的文件中,在【开发环境】,项目目录下的所有 js,jsx,vue,ts,tsx 都要执行vue-cli-service lint,命令

**vue-cli-service lint**是vue-cli3.0在构建项目的时候自动生成的。检验规则

.eslintrc.js,.eslintignore,.editorconfig

VsCode插件 Conventional Commits

使用这个工具可以帮助快速生成提交信息。

首先在VsCode 中安装该插件,然后ctrl + shift + p 并输入Conventional Commits。根据提示一步步点击就可以快速生成啦~

image.png

image.png

image.png

image.png

image.png

image.png