pre-commit 拓展脚本
目的
当我们项目中某些文件(公共配置文件、需要小心修改的文件)发生变动的时候,我们要拦截,并在 commit 的时候,给予用户提示,让用户输入 y / n 确定是否要继续提交
实现
在 pre-commit 钩子中添加脚本
javascript
# 定义颜色代码
RED='\033[0;31m'
GREEN='\033[0;32m'
YELLOW='\033[0;33m'
CYAN='\033[0;36m'
NC='\033[0m' # No Color
# 定义需要检测的文件列表,用空格分隔
FILES_TO_CHECK=(".eslintrc.cjs" ".prettierrc.json" ".stylelintrc.cjs" "commitlint.config.js" ".vscode/settings.json")
# 获取暂存区中被修改的文件列表
MODIFIED_FILES=$(git diff --cached --name-only)
# 标志变量,表示是否有目标文件被修改
IS_MODIFIED=false
# 检查每个文件是否被修改
for FILE in "${FILES_TO_CHECK[@]}"; do
if echo "$MODIFIED_FILES" | grep -q "$FILE"; then
echo "${YELLOW}⚠️ 检测到${CYAN} $FILE ${YELLOW}配置文件已被修改!,请与团队成员确认后确定是否提交。${NC}"
IS_MODIFIED=true
fi
done
# 如果有目标文件被修改,提示用户确认是否继续提交
if $IS_MODIFIED; then
read -p "是否继续提交? (y/n): " CONFIRM < /dev/tty
if [[ "$CONFIRM" =~ ^[Yy]$ ]]; then
echo "${GREEN}✅ 用户确认,继续提交。${NC}"
exit 0
else
echo "${RED}❌ 用户取消提交。${NC}"
exit 1
fi
else
# 如果未修改目标文件,正常退出
echo "${GREEN}✅ 目标文件未修改,继续提交。${NC}"
exit 0
fi