# git-hook **Repository Path**: LOVEDDZ/git-hook ## Basic Information - **Project Name**: git-hook - **Description**: Git Hook - 代码规范检查工具 基于阿里代码规范的 Git pre-commit 钩子工具。在提交代码时自动检查规范,不符合规范的代码将被阻断,并给出明确的错误提示和修复建议。 - **Primary Language**: Unknown - **License**: Not specified - **Default Branch**: master - **Homepage**: None - **GVP Project**: No ## Statistics - **Stars**: 0 - **Forks**: 0 - **Created**: 2026-04-01 - **Last Updated**: 2026-04-11 ## Categories & Tags **Categories**: Uncategorized **Tags**: None ## README # Git Hook - 代码规范检查工具 基于阿里代码规范的 Git pre-commit 钩子工具。在提交代码时自动检查规范,不符合规范的代码将被阻断,并给出明确的错误提示和修复建议。 ## 目录 - [功能特性](#功能特性) - [环境要求](#环境要求) - [快速开始](#快速开始) - [配置到项目](#配置到项目) - [检查规则](#检查规则) - [常见问题](#常见问题) - [高级配置](#高级配置) ## 功能特性 | 特性 | 说明 | |-----|------| | 自动检查 | `git commit` 时自动触发,无需手动操作 | | 规范阻断 | 不符合规范的代码无法提交 | | 清晰提示 | 显示文件、行号、规则名、修复建议 | | 多语言支持 | Java(已完成)、Python、JS/TS(规划中) | ## 环境要求 | 依赖 | 版本 | 说明 | |-----|------|------| | Python | 3.11+ | 运行脚本 | | Git | 任意版本 | 版本控制 | | Java | 8+ | Java 代码检查(可选) | ## 快速开始 ### 1. 安装 pre-commit ```bash pip install pre-commit ``` ### 2. 配置到项目 **方式一:使用配置脚本(推荐)** ```bash # 在 git-hook 目录运行 python setup.py /path/to/your/project # Windows 示例 python setup.py D:\projects\my-app ``` 执行后会自动: 1. 复制配置文件到目标项目 2. **预加载依赖(PMD + P3C)** - 首次提交无需等待下载 3. 安装 pre-commit 钩子 **方式二:手动配置** ```bash # 1. 复制以下文件到你的项目根目录 # - .pre-commit-config.yaml # - scripts/ # - config/ # 2. 进入项目目录 cd /path/to/your/project # 3. 安装钩子 pre-commit install ``` ### 3. 验证安装 ```bash # 手动触发检查 pre-commit run --all-files # 预期输出 Java 代码规范检查通过 ``` ## 配置到项目 ### 文件结构 配置完成后,你的项目结构如下: ``` your-project/ ├── .git/ ├── .pre-commit-config.yaml # pre-commit 配置 ├── scripts/ │ └── run-java-check.py # Java 检查脚本 ├── config/ │ └── rules/ │ └── java-rules.xml # 规则配置 └── src/ # 你的源代码 ``` ### 提交流程 ``` git add . ↓ git commit -m "your message" ↓ pre-commit 自动运行 ↓ ┌─────────────────────────────────┐ │ 检查暂存的 .java 文件 │ │ │ │ ├─ 无违规 → 提交成功 ✓ │ │ └─ 有违规 → 提交被阻断 ✗ │ │ 显示错误详情 │ └─────────────────────────────────┘ ``` ## 检查规则 ### Java 规范(Alibaba P3C) | 规则类别 | 优先级 | 说明 | 示例 | |---------|--------|------|------| | 并发处理 | Blocker | 线程安全问题 | 线程池必须命名 | | 命名规范 | Critical | 命名不符合规范 | 类名使用 UpperCamelCase | | 集合处理 | Critical | 集合操作问题 | ArrayList 初始化指定容量 | | 异常处理 | Critical | 异常处理问题 | 禁止捕获异常后不做处理 | | 常量定义 | Critical | 常量定义问题 | 魔法值直接使用 | | ORM 规范 | Critical | 数据库操作问题 | 禁止 SELECT * | | 流程控制 | Major | 控制流问题 | switch 必须有 default | | 面向对象 | Major | OOP 问题 | 避免通过对象引用访问静态变量 | | 注释规范 | Minor | 注释问题 | 方法缺少 Javadoc | ### 规则优先级 | 优先级 | 标识 | 说明 | 行为 | |-------|------|------|------| | 1 | Blocker | 必须修复 | 阻断提交 | | 2 | Critical | 严重问题 | 阻断提交 | | 3 | Major | 重要问题 | 阻断提交 | | 4 | Minor | 次要问题 | 阻断提交 | | 5 | Info | 建议 | 显示警告 | ## 使用示例 ### 正常提交流程 ```bash $ git add src/Main.java $ git commit -m "feat: add main class" [INFO] 检查 1 个 Java 文件... [OK] Java 代码规范检查通过 [main abc1234] feat: add main class 1 file changed, 10 insertions(+) ``` ### 违规被阻断 ```bash $ git add src/UserManager.java $ git commit -m "feat: add user manager" [INFO] 检查 1 个 Java 文件... [ERROR] Java 代码规范检查失败 发现 2 个违规项: [FILE] /project/src/UserManager.java Line 15 [CRITICAL] [X] ClassNamingShouldBeCamelRule 类名【usermanager】不符合 UpperCamelCase 风格 Line 28 [BLOCKER] [X] ThreadShouldSetNameRule 线程池必须手动命名,便于排查问题 [TIPS] - 请修复以上违规项后重新提交 - 如需临时跳过检查:git commit --no-verify ``` ### 临时跳过检查 ```bash # 不推荐,仅在紧急情况使用 git commit --no-verify -m "emergency fix" ``` ## 常见问题 ### Q: 首次提交需要等待下载吗? A: **不需要**。使用 `setup.py` 配置项目时,会自动从 `git-hook-cache.zip` 解压依赖到本地缓存,首次提交即可直接运行检查。 缓存位置: - Windows: `%LOCALAPPDATA%\git-hook-cache\` - Linux/macOS: `~/.cache/git-hook/` 如果没有 `git-hook-cache.zip`,首次提交时会自动从网络下载(约 50MB)。 ### Q: 如何忽略某个规则? A: 在代码中添加注解: ```java @SuppressWarnings("PMD.ClassNamingShouldBeCamelRule") // NOSONAR public class myClass { // ... } ``` ### Q: 如何排除某些文件? A: 在 `.pre-commit-config.yaml` 中添加排除规则: ```yaml repos: - repo: local hooks: - id: alibaba-p3c-java # ... 其他配置 exclude: ^generated/ # 排除 generated 目录 ``` ### Q: Java 未安装怎么办? A: 如果未安装 Java,检查会自动跳过,不会阻断提交。建议安装 Java 8+ 以启用检查功能。 ### Q: 如何只检查新增文件? A: pre-commit 默认只检查暂存文件。如需检查所有文件: ```bash pre-commit run --all-files ``` ### Q: 如何卸载? A: 在项目目录运行: ```bash pre-commit uninstall rm -rf scripts/ config/ .pre-commit-config.yaml ``` ## 高级配置 ### 自定义规则优先级 编辑 `config/rules/java-rules.xml`: ```xml 1 5 ``` ### 排除特定规则 ```xml ``` ### 配置 SHA256 校验(增强安全性) 编辑 `scripts/run-java-check.py`,配置真实的哈希值: ```python PMD_SHA256 = "实际的 SHA256 值" P3C_SHA256 = "实际的 SHA256 值" ``` 获取哈希值: ```bash # PMD curl -L | sha256sum # P3C curl -L | sha256sum ``` ### CI/CD 集成 在 CI 流程中添加: ```yaml # GitHub Actions - name: Install pre-commit run: pip install pre-commit - name: Run checks run: pre-commit run --all-files ``` ```yaml # GitLab CI lint: script: - pip install pre-commit - pre-commit run --all-files ``` ## 支持的语言 | 语言 | 状态 | 工具 | |------|------|------| | Java | 已完成 | PMD + Alibaba P3C | | Python | 规划中 | ruff / pylint | | JavaScript | 规划中 | ESLint | | TypeScript | 规划中 | ESLint | ## 命令速查 | 命令 | 说明 | |-----|------| | `pre-commit install` | 安装钩子 | | `pre-commit uninstall` | 卸载钩子 | | `pre-commit run --all-files` | 检查所有文件 | | `pre-commit run alibaba-p3c-java` | 只检查 Java | | `git commit --no-verify` | 跳过检查 | | `python setup.py <项目路径>` | 一键配置到项目 | ## 参考资料 - [阿里巴巴 Java 开发手册](https://github.com/alibaba/p3c) - [PMD 静态代码分析](https://pmd.github.io/) - [pre-commit 框架](https://pre-commit.com/) ## License MIT License