1. Husky的原理:

  • Husky接入Git hooks,并在需要的某些阶段运行脚本
  • git hooks: a. Git hooks可以设置在Git生命周期的在某些事件下运行的脚本: (1). 两组钩子:客户端的和服务器端的: 1. 客户端钩子用于如提交、合并的操做所调用 2. 服务器端钩子用于如接收被推送的提交等的联网操做 b. 事件包括提交的不同阶段: (1). 提交之前:pre-commit (2). 提交之后:post-commit c. 允许开发人员运行自定义代码任务、运行其它自动化脚本来执行合适的代码规范及标准

(1). 安装包并执行prepare脚本:

// 1. 安装包
yarn add husky@^8.0.3 -D
// 2. 增加package.json脚本prepare脚本
{
  "script": {
    "prepare": "husky install",
    "cp": "node cp.js"
  }
}
// 3. 执行一下prepare脚本
yarn prepare

(2). 添加hook:

// 将&替换成&&后,cp.js脚本执行完毕后终端不会退出
npx husky add .husky/pre-commit "npm run cp && git add ."
#!/bin/sh
. "$(dirname "$0")/_/husky.sh"

npm run cp && git add .

作用:

  • .husky目录下新增了一个名为pre-commit的shell脚本
  • 在执行git commit命令时,会先执行pre-commit这个脚本

注:

  • 场景分析: a. 需要执行cp.js来copy一些文件: (1). 执行完cp.js脚本后生成、修改的文件都算在本次提交内的提交 b. 如果没有执行git add .,每次执行完cp.js后修改的文件都不会被重新提交进来 c. 会导致每次提交完代码后都有一个修改的文件还在工作区
  • 需要在pre-commit的hooks里面&& git add .
  • 在执行git commit的时可以一起提交