Pre-commit 配置指导书

概述

pre-commit 是一个 Git Hooks 框架,用于在 git commit 时自动运行代码检查和格式化工具。本项目已配置以下检查:

Hook 功能 说明
clang-format C/C++ 代码格式化 自动格式化代码,保持风格一致
OAT Check 开源合规检查 检测许可证头、禁止二进制文件提交

环境要求

  • Git: 2.0+
  • Python: 3.8+
  • Java: 17+ (OAT 工具依赖,可自动安装)
  • clang-format: 14.0+ (代码格式化)
  • Maven: 3.6+ (OAT 工具依赖,可自动安装)
  • pre-commit: 2.0+ (Hook框架)

安装步骤

注:若需要使用pre-commit提供的代码检查功能,需要按照如下步骤进行安装配置;若无需pre-commit提供的代码检查功能,可不安装。

1. 安装 pre-commit

# 方式一: 使用 pip
pip3 install pre-commit

# 方式二: 使用系统包管理器 (Ubuntu/Debian)
sudo apt install pre-commit

2. 安装依赖工具

# Ubuntu/Debian
sudo apt install clang-format openjdk-17-jre maven

# macOS
brew install clang-format openjdk@17 maven

3. 项目路径下安装 Git Hooks

cd /path/to/ops-transformer
pre-commit install

安装成功后会显示:

pre-commit installed at .git/hooks/pre-commit

使用方法

自动检查(推荐)

每次执行 git commit 时,pre-commit 会自动运行检查:

git add .
git commit -m "your commit message"

输出示例:

clang-format.............................................................Passed
OAT Compliance Check.....................................................Passed

手动运行检查

# 运行所有检查
pre-commit run

# 运行特定类型检查
pre-commit run clang-format
pre-commit run oat-check

# 检查所有文件(不限于暂存区)
pre-commit run --all-files

跳过检查(紧急情况)

git commit --no-verify -m "emergency fix"

注意: 仅在紧急情况下使用,正常开发流程应保证检查通过。

检查项说明

1. clang-format

自动格式化 C/C++ 代码,遵循项目 .clang-format 配置:

  • 缩进: 4 空格
  • 列宽: 120 字符
  • 大括号: 函数定义换行,控制语句同行
  • 指针对齐: 右对齐 (int *ptr)

2. OAT Compliance Check

OAT (Open Source Audit Tool) 检查开源合规性:

检查项 说明
许可证头检查 确保源文件包含 CANN License 头
二进制文件检查 禁止提交二进制文件
归档文件检查 禁止提交 zip/tar 等归档文件

OAT 检查脚本,首次运行时会自动:

  1. 检测/安装 Java 17
  2. 检测/安装 Maven
  3. 克隆并编译 tools_oat 工具(约 1-2 分钟)

常见问题

Q1: 首次提交时 OAT 检查很慢

原因: 首次运行需要克隆并编译 OAT 工具。

解决: 这是正常现象,后续提交会使用缓存的 JAR,速度会很快。

相关文档