简单的举一些常见的githooks例子
Git Hook 执行时机 说明
pre-commit git commit执行前 可以用git commit --no-verify绕过
commit-msg git commit执行前 可以用git commit --no-verify绕过
首先安装
npm install -D husky
初始化husky
npx husky install .husky
添加一个commit msg钩子
npx husky add .husky/commit-msg "node scripts/verifyCommit.js"
创建verifyCommit.js
添加代码
这段代码逻辑是,找到文件并读取了commit的提交信息,然后使用正则去校验提交信息的格式,如果commit的信息不符合要求,会直接报错并且终止代码的提交。
const msg = require('fs')
.readFileSync('.git/COMMIT_EDITMSG', 'utf-8')
.trim()
const commitRE = /^(revert: )?(feat|fix|docs|dx|style|refactor|perf|test|workflow|build|ci|chore|types|wip|release)(\(.+\))?: .{1,50}/
const mergeRe = /^(Merge pull request|Merge branch)/
if (!commitRE.test(msg)) {
if(!mergeRe.test(msg)){
console.log('git commit信息校验不通过')
console.error(`git commit的信息格式不对, 需要使用 title(scope): desc的格式
比如 fix: xxbug
feat(test): add new
具体校验逻辑看 scripts/verifyCommit.js
`)
process.exit(1)
}
}else{
console.log('git commit信息校验通过')
}
在commit-msg执行的时候我们还可以用代码执行之前的钩子,pre-commit,去执行ESLint代码格式,
这样我们在执行git commit的时候,首先会进行ESLint校验,然后在执行commit的log信息格式检查,全部通过后代码才能提交至Git。
npx husky add .husky/pre-commit "npm run lint"
package.json 中创建
"lint": "eslint --fix --ext .js,vue src/"
commit msg参考
feat: 新功能
fix: 修改 bug
docs: 文档
perf: 性能相关
refactor: 代码重构(就是不影响使用,内部结构的调整)
test: 测试用例
style: 样式修改
workflow: 工作流
build: 项目打包构建相关的配置修改
ci: 持续集成相关
revert: 恢复上一次提交(回滚)
wip: work in progress 工作中 还没完成
chore: 其他修改(不在上述类型中的修改)
release: 发版
deps: 依赖相关的修改