pre-commit 钩子是在 git commit 执行后在输入commit message之前触发的钩子。它可以用于检查即将提交的快照、查看是否忘记某些内容、确保测试运行或检查代码等。除了手动修改hooks也可以使用一些git hooks工具,
其中husky内部也是修改git hooks。
配置
编辑项目根目录下的隐藏文件.git/hooks/pre-commit进行修改,简易配置可参考如下:
#!/bin/bash
# 读取git暂存区的.js 和 .jsx文件
files=$(git diff --cached --name-only | grep -E '\.jsx?$')
# 在控制台打印文件列表
echo 'staged 文件列表如下:'
echo $files
# 如果文件列表为空,退出执行环境,继续执行commit操作
if [[ $files = "" ]] ; then
exit 0
fi
# 设置 校验失败变量,默认为0,代表校验成功
failed=0
# 循环文件列表
for file in ${files}; do
# 判断文件是否存在(-e 表示 exists)
if [ ! -e $file ] ; then
continue
fi
# 在控制台打印该文件的eslint检验结果,如果通过,则返回空
git show :$file | ./node_modules/.bin/eslint $file --color --fix
# 文件未通过eslint检验,标记为失败
if [[ $? != 0 ]] ; then
failed=1
fi
done;
# 有文件未通过检验,退出执行环境,中断commit操作
if [[ $failed != 0 ]] ; then
echo "❌ error: eslint failed, please check the code!"
exit $failed
fi