Skip to content

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

效果

made with ❤️ by ankang