前置条件
node_modules存在,否则需要执行依赖包安装
npm install
or yarn
or pnpm install
pre-commit
检查代码是否通过eslint husky的配置检测
package.json
{
"lint-staged": {
"*.js": ["eslint", "git add"]
},
"scripts": {
"lint-staged": "lint-staged",
"format": "prettier --write \"**/*.{js,json}\"",
"format-check": "prettier --check \"**/*.{js,json}\""
},
"devDependencies": {
"husky": "^x.y.z",
"eslint": "^x.y.z",
"prettier": "^x.y.z"
},
"husky": {
"hooks": {
"pre-commit": "npm run lint-staged && npm run format-check"
}
}
}
pre-push 配置
在提交之前检测当前分支是否已经合并最新的master分支代码
需要配置文件pre-push.sh package.json
.husky/pre-commit.sh
- 检测当前分支是否是最新的
pre-push.sh
git fetch --all
echo "fetch code"
# 检查当前分支是否与远程同名分支有差异
if ! git merge-base --is-ancestor origin/$(git rev-parse --abbrev-ref HEAD) HEAD ; then
echo "您的分支落后于远程分支,请先拉取并合并远程更改。"
exit 1
fi
echo "compare remote barnch fininsh"
- 检测当前分支是否是合并了最新的master分支
pre-push.sh
# 获取当前分支名
current_branch=$(git rev-parse --abbrev-ref HEAD)
# 主分支名称,这里假设为 master
main_branch="master"
# 检查当前分支是否为主分支
if [ "$current_branch" = "$main_branch" ]; then
echo "当前已在主分支,请确保代码已更新并准备提交。"
else
# 拉取远程主分支的最新提交
git fetch origin "$main_branch"
# 检查当前分支是否落后于远程主分支
if ! git merge-base --is-ancestor origin/"$main_branch" HEAD; then
echo "您的分支落后于远程主分支,请先拉取并合并最新的主分支代码。"
exit 1
fi
fi
# 如果检查通过,继续执行后续的钩子任务
exit 0
package.json
"husky": {
"hooks": {
"pre-commit": "sh ./.husky/pre-commit.sh"
}
}