diff --git a/.githooks/integrity-check.sh b/.githooks/integrity-check.sh new file mode 100755 index 000000000..f1eacf806 --- /dev/null +++ b/.githooks/integrity-check.sh @@ -0,0 +1,65 @@ +#!/bin/bash +# ============================================================ +# Integrity Check — 定时巡检 develop 分支的完整性 +# 用法: bash .githooks/integrity-check.sh +# 建议: crontab 每天 8:00 执行一次 +# ============================================================ + +# 配置 +REMOTE="origin" +BRANCH="develop" +WORK_DIR="/tmp/his-integrity-check" + +# 受保护路径 +PATHS=( + "openhis-server-new/pom.xml" + "openhis-server-new/core-admin/pom.xml" + "openhis-server-new/core-common/pom.xml" + "openhis-server-new/core-flowable/pom.xml" + "openhis-server-new/core-framework/pom.xml" + "openhis-server-new/core-generator/pom.xml" + "openhis-server-new/core-quartz/pom.xml" + "openhis-server-new/core-system/pom.xml" + "openhis-server-new/openhis-application/pom.xml" + "openhis-server-new/openhis-domain/pom.xml" + "openhis-server-new/openhis-common/pom.xml" +) + +echo "== Integrity Check $(date) ==" + +# 拉取最新 +cd $WORK_DIR 2>/dev/null || (mkdir -p $WORK_DIR && cd $WORK_DIR && git clone --depth=1 http://zhangfei:GentronHIS2025@192.168.110.253:3000/wangyizhe/his.git . 2>/dev/null) +cd $WORK_DIR && git fetch origin $BRANCH --depth=1 2>/dev/null && git reset --hard origin/$BRANCH 2>/dev/null + +ALL_PASS=true + +# 检查每个路径是否存在 +for path in "${PATHS[@]}"; do + if git ls-tree -r HEAD --name-only 2>/dev/null | grep -q "^$path$"; then + echo " ✅ $path" + else + echo " ❌ $path — 丢失!" + ALL_PASS=false + fi +done + +# 检查最近10次提交是否有异常 +echo "" +echo "最近10次提交:" +git log --oneline -10 2>/dev/null | while read sha msg; do + # 检查删除文件数 + del=$(git diff --name-status ${sha}^..${sha} 2>/dev/null | grep -c "^D") + if [ "$del" -gt 100 ]; then + echo " ⚠️ $sha 删除了 $del 个文件! $msg" + else + echo " ✓ $sha ($del 删除) $msg" + fi +done + +if [ "$ALL_PASS" = true ]; then + echo "" + echo "✅ 完整性检查通过" +else + echo "" + echo "❌ 完整性检查失败! 请立即处理!" +fi