回迁工具:check-redlines 增量模式(--staged-diff)+ 存量扫描(--scan-all)+ setup 脚本
为「老项目回迁这套强制体系」补三件套,核心是不搞大爆炸清理: - check-redlines.js:新增 --staged-diff(只查本次新增行,老代码存量违规不阻塞, 新代码从此强制合规)与 --scan-all(可编辑正式代码 ES5 存量违规,只报不挡)。 - .githooks/pre-commit:按本地 git 配置 redlines.stagedmode 选严格(整文件)/增量(新增行)。 - setup-redlines.sh:一键激活+自检——迁移清单、node/权限、set core.hooksPath、 存量扫描;`--diff` 一键切增量模式供老项目用。 - 已测:scan-all 报本仓库 0 存量违规;增量模式放行含老违规文件的干净新增行、 拦新增违规行;严格模式整文件拦;setup 幂等且模板保持严格。 Co-Authored-By: Claude Opus 4.8 (1M context) <noreply@anthropic.com>
This commit is contained in:
@@ -0,0 +1,53 @@
|
||||
#!/bin/sh
|
||||
# 一键激活 + 自检机械红线校验体系。模板全新克隆、或老项目回迁都适用。
|
||||
#
|
||||
# 用法(在仓库内任意目录):
|
||||
# sh setup-redlines.sh 严格模式(整文件扫描;干净仓库/模板克隆用)
|
||||
# sh setup-redlines.sh --diff 增量模式(只查新增行;已有开发量的老项目回迁用,
|
||||
# 老代码存量违规不阻塞,新代码从此强制合规)
|
||||
#
|
||||
# 它做四件事:迁移清单自检 → 依赖/权限检查 → 激活 hooksPath → 存量违规扫描(只报不挡)。
|
||||
|
||||
ROOT="$(git rev-parse --show-toplevel 2>/dev/null)"
|
||||
if [ -z "$ROOT" ]; then echo "✗ 当前不在 git 仓库内。"; exit 1; fi
|
||||
cd "$ROOT" || exit 1
|
||||
|
||||
echo "== 1) 迁移清单自检(缺一不可,尤其 docs/ 是被遵循的内容与注入源)=="
|
||||
missing=0
|
||||
for f in CLAUDE.md .claude/settings.json .claude/hooks/check-redlines.js .claude/hooks/remind-docs.js .githooks/pre-commit \
|
||||
docs/client/development-guide docs/server/development-guide docs/games/engineering; do
|
||||
if [ -e "$f" ]; then echo " ✓ $f"; else echo " ✗ 缺: $f"; missing=1; fi
|
||||
done
|
||||
if [ "$missing" = 1 ]; then
|
||||
echo " ⚠ 有缺失——请从模板补齐后再跑本脚本(缺 docs/ 会让 @import 悬空、注入为空)。"
|
||||
fi
|
||||
|
||||
echo "== 2) 依赖检查 =="
|
||||
if command -v node >/dev/null 2>&1; then echo " ✓ node: $(node -v)"; else
|
||||
echo " ✗ 未找到 node —— PreToolUse 与 pre-commit 都会失败,请先安装 Node。"; fi
|
||||
|
||||
echo "== 3) 权限 =="
|
||||
if chmod +x .githooks/pre-commit 2>/dev/null; then echo " ✓ .githooks/pre-commit 可执行"; else
|
||||
echo " ! 无法 chmod(多为 Windows 文件系统,一般不影响 git 调用)"; fi
|
||||
|
||||
echo "== 4) 激活提交闸 =="
|
||||
git config core.hooksPath .githooks
|
||||
if [ "$1" = "--diff" ]; then
|
||||
git config redlines.stagedmode diff
|
||||
echo " ✓ core.hooksPath=.githooks;提交闸=增量模式(只查新增行)"
|
||||
else
|
||||
git config --unset redlines.stagedmode 2>/dev/null
|
||||
echo " ✓ core.hooksPath=.githooks;提交闸=严格模式(整文件)"
|
||||
fi
|
||||
echo " git 解析到的 hooks 目录:$(git rev-parse --git-path hooks)"
|
||||
|
||||
echo "== 5) 存量违规扫描(只报告,不阻塞)=="
|
||||
if command -v node >/dev/null 2>&1 && [ -f .claude/hooks/check-redlines.js ]; then
|
||||
node .claude/hooks/check-redlines.js --scan-all
|
||||
else
|
||||
echo " (缺 node 或 check-redlines.js,跳过)"
|
||||
fi
|
||||
|
||||
echo ""
|
||||
echo "完成。日常提交起即受机械红线闸保护(严格 ES5 + 可编辑范围)。"
|
||||
echo "注意:本层只管可机器判定的硬红线;判断类规范(职责单一/数据权威/房间隔离等)仍需人工与复审。"
|
||||
Reference in New Issue
Block a user