git-hooks
1、Git 能在特定的重要动作发生时触发自定义脚本
2、在开发员提交之前执行检查脚本
3、但是需要把脚本放在本地的 .git/hooks 目录下,不方便在团队内推广
- 因此就出现了husky
4、这样可以避免不符合规范的代码污染远程仓库
当我们执行git操作时,自动触发配置的脚本;常用的hooks有
pre-commit和commit-message
husky
-
husky是什么
1、husky可以使得让git hooks更容易使用
2、git commit 提交之前执行检查脚本
配置
- 安装
pnpm add husky -D
- 初始化
- 会在根目录生成一个
.husky文件夹
- 会在根目录生成一个
pnpm exec husky init
- 可选:package配置
// package.json
"scripts": {
// 新增这一行
"prepare": "husky install",
...
},
- 设置prepare命令的目的是, 其他用户安装项目依赖执行prepare命令的时候,会统一生成
.husky文件夹,
添加pre-commit钩子
#!/usr/bin/env sh
. "$(dirname -- "$0")/_/husky.sh"
pnpm exec lint-staged
#!/bin/sh和#!/usr/bin/env sh区别
"#!/bin/sh" 和 "#!/usr/bin/env sh" 都是 shebang 行,它们都用于在脚本文件的开头指定执行脚本的解释器。
但是,它们的区别在于它们使用不同的路径来指定解释器。
"#!/bin/sh" 直接使用解释器的绝对路径,这通常指定为 Bourne shell(sh)。因此,该 shebang 行告诉系统使用 Bourne shell 来解释和执行脚本。
"#!/usr/bin/env sh" 使用 "/usr/bin/env" 来搜索解释器。这意味着系统会在 PATH 环境变量中列出的目录中查找解释器。在这种情况下,"sh" 指定了解释器,通常也是 Bourne shell。因此,该 shebang 行也会告诉系统使用 Bourne shell 来解释和执行脚本。
总的来说,"#!/bin/sh" 和 "#!/usr/bin/env sh" 的区别在于它们使用不同的方式来指定解释器的路径。前者使用绝对路径,后者使用相对路径。
遇到问题
执行husky之后,提交commit,出现找不到node问题
husky - pre-commit hook exited with code 1 (error)
'node' 不是内部或外部命令,也不是可运行的程序
- 方式一:
- 1、检查node、nvm环境变量
- 2、步骤一不行的话,试试重装git、node、nvm环境
- 方式二:
- 注意:这个命令是用于取消设置项目中使用的 Git 钩子文件目录,执行之后,gitHooks会失效
# 取消设置项目中使用的 Git 钩子文件目录
git config --unset core.hooksPath