Files
lingxi/docs/工程规范/01-Git规范.md
T
Stev_Wang 75cedbe97b docs: 明确 Git 提交信息与 PR 标题使用中文
原 GIT-05 要求 subject 用英文祈使句,与团队实际书写习惯不符(已有提交均为
中文),且缺少中英混排与术语约定,容易写出 Chinglish、自造术语或中英标点混乱。

本次改动:
- GIT-05 改为「提交信息一律使用中文」,type / scope 保留英文小写,规定祈使句、
  字数(≤50 汉字 / 整行 ≤72 字符)与不加句末标点;
- 新增 GIT-21~GIT-23:中英文间加空格、使用全角标点与反引号、术语沿用 PRD 术语表、
  禁止 Chinglish 与无信息缩写;
- 新增 §2.2 commitlint 配置要点:中文必须关闭 subject-case、拦截中文句号,
  否则钩子校验实际无效;
- 同步 03(commit-msg 钩子说明)、07(PR-01 标题用中文)与 AGENTS §7 / §9 / 附录。

影响面:仅文档,无代码影响。新规则对后续提交生效,已推送的历史提交不改写
(GIT-15 禁止改写 main 历史)。
回滚方式:git revert 本提交。
2026-11-02 15:12:56 +08:00

147 lines
6.4 KiB
Markdown
Raw Blame History

This file contains invisible Unicode characters
This file contains invisible Unicode characters that are indistinguishable to humans but may be processed differently by a computer. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.
This file contains Unicode characters that might be confused with other characters. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.
# 01 · Git 规范
| 项 | 内容 |
| --- | --- |
| 文档版本 | V1.0(2026-11-02) |
| 依据 | 技术架构 §4.6(CI/CD)、§10.1(仓库结构) |
| 适用范围 | 全仓库(代码、文档、配置、迁移) |
| 强制级别 | 强制 |
---
## 1 分支模型
采用 **trunk-based(主干 + 短生命周期分支)**,不建 `develop`、不建长期 `release` 分支。
| 类型 | 命名 | 用途 | 生命周期 |
| --- | --- | --- | --- |
| 主干 | `main` | 始终可发布 | 永久 |
| 功能 | `feat/<scope>-<简述>` | 新功能 | ≤ 5 天,超过须拆分 |
| 修复 | `fix/<scope>-<简述>` | 缺陷修复 | ≤ 2 天 |
| 文档 | `docs/<简述>` | 仅文档 | ≤ 1 天 |
| 重构 | `refactor/<scope>-<简述>` | 行为不变的结构调整 | ≤ 3 天 |
| 其他 | `chore/` `test/` `perf/` `build/` `ci/` | 对应类型 | ≤ 2 天 |
规则:
- `GIT-01` 分支名全小写 kebab-case,≤ 50 字符,**不含中文**;`scope` 用模块或包名(`api` / `web` / `worker` / `media` / `db` / `ci` / `docs`)。
- `GIT-02` 分支必须从最新 `main` 拉出,合并前 rebase 到 `main` 最新。
- `GIT-03` 禁止直接 push `main`;分支保护开启:必须 PR + CI 绿 + ≥1 批准。
- `GIT-04` 合并后立即删除远端分支。
---
## 2 提交信息(Conventional Commits 1.0)
```
<type>(<scope>): <中文简述>
<body:中文,说明为什么改 + 影响面 / 回滚方式>
<footer:BREAKING CHANGE / Refs: R-xx / Closes #12>
```
| `type` | 用途 |
| --- | --- |
| `feat` | 新功能 |
| `fix` | 缺陷修复 |
| `docs` | 文档 |
| `style` | 仅格式(不影响逻辑) |
| `refactor` | 重构(不改行为) |
| `perf` | 性能 |
| `test` | 测试 |
| `build` | 构建 / 依赖 |
| `ci` | CI / 脚本 |
| `chore` | 杂项 |
| `revert` | 回滚 |
规则:
- `GIT-05` 提交信息(`subject` + 正文)**一律使用中文**;`type` / `scope` 保留英文小写。`subject` 用祈使句(「新增 …」而非「新增了 …」「新增的 …」),≤ 50 个汉字且整行 ≤ 72 字符,**不加句末标点**(英文 `.` 与中文 `。` 均禁止)。
- `GIT-06` `scope` 必填,取值见 `GIT-01`。
- `GIT-07` 正文说明「**为什么**」与「**影响面 / 回滚方式**」;纯重命名类可仅一行 subject。
- `GIT-08` 破坏性变更:`type` 后加 `!` 且 footer 写 `BREAKING CHANGE: <说明与迁移方式>`。
- `GIT-09` 关联业务规则写 `Refs: R-04`;关联 issue 写 `Closes #123`。
- `GIT-10` 一个提交只做一件事;**禁止**在功能提交里顺带格式化无关文件。
- `GIT-11` 禁止 `WIP`、`fix bug`、`update` 等无信息量信息;禁止 `--no-verify` 绕过钩子。
示例:
```
feat(media): 图片批次支持按规格矩阵展开任务项
批量生产原先按「模板 × 商品图」展开,导致同素材多规格重复建素材,
违反 PRD R-25「素材为主对象、规格为属性」。改为展开到 task_item,
规格作为属性写入 material_specs。
影响面:production_tasks 新增 spec_key 列(expand 迁移,兼容旧数据)。
回滚方式:关闭 FEATURE_MATRIX_SPEC 开关,旧路径仍可用。
Refs: R-25
```
### 2.1 中文书写与中英混排(GIT-21 ~ GIT-23)
- `GIT-21` 中文与英文 / 数字之间**加一个空格**(`新增 PRD V1.6`、`导出 50 张图`);标点用中文全角;代码、命令、文件名、版本号、错误码用反引号包裹并保留原文。
- `GIT-22` 术语沿用 PRD 附录 C 术语表,**禁止自造同义词**(「素材规格」不写「素材尺寸」,「要素卡」不写「简报卡」)。
- `GIT-23` 禁止 Chinglish 与无信息缩写:不写 `add 功能 for batch`、`opt`、`tmp`、`misc`、`update`;`type` / `scope` 之外的英文只能是专有名词、标识符或引用编号。
### 2.2 commitlint 配置要点
中文提交信息有三个坑,必须在 `commitlint.config.mjs` 中显式处理,否则校验形同无效:
```js
export default {
extends: ['@commitlint/config-conventional'],
rules: {
'subject-case': [0], // 中文无大小写概念,关闭该规则
'header-max-length': [2, 'always', 72], // 按字符计,中文每个字计 1
'subject-full-stop': [2, 'never', '。'], // 拦截中文句号
'subject-empty': [2, 'never'],
},
};
```
> 对应的 husky `commit-msg` 钩子见 [03-格式化与Lint](03-格式化与Lint.md) §4。
---
## 3 PR 与合并
- `GIT-12` PR 标题遵循提交规范(Squash 后即主干提交信息)。
- `GIT-13` 合并方式统一 **Squash Merge**,保持 `main` 线性;禁止 Merge commit。
- `GIT-14` 单个 PR 变更 ≤ 400 行(含测试,不含 lock 文件与生成代码);超出须拆分并在描述说明依赖关系。
- `GIT-15` 禁止 force push `main` / 已有人 Review 的公共分支;个人分支允许 `--force-with-lease`。
- `GIT-16` PR 描述模板与双人 Review 场景见 [07-CodeReview与PR规范](07-CodeReview与PR规范.md)。
---
## 4 Tag 与发布
| 项 | 规则 |
| --- | --- |
| 版本号 | 语义化 `v<主>.<次>.<补>` |
| 打 Tag 时机 | 生产发布前,由发布负责人在 `main` 打 annotated tag |
| 里程碑 Tag | `m0` / `m1` / `m2`…(对应 PRD 分期),仅标记不进版本链 |
| 发布记录 | 每个 Tag 必须写变更摘要(可复用 PR 标题集合) |
| 回滚 | 回滚用新 Tag(`v1.2.1` 回滚 `v1.2.0` 内容),**禁止删除已发布 Tag** |
---
## 5 大文件与二进制
- `GIT-17` 禁止入库 > 10 MB 的二进制(PSD 模板、成片、视频、字体包),一律走对象存储;确需入库(如开源字体)用 **Git LFS** 并在 PR 说明。
- `GIT-18` 禁止入库:`.env*`、密钥、证书私钥、构建产物、`node_modules/`、日志、`项目参考/`。
- `GIT-19` `pnpm-lock.yaml` 必须提交且与 `package.json` 同步;**禁止**手工编辑 lock 文件。
- `GIT-20` 误提交敏感信息:立即轮换密钥 → 用 `git filter-repo` 清理历史 → 全员重新 clone → 记录复盘。
---
## 6 检查清单(提交前 / 合并前)
- [ ] 分支名符合 `GIT-01`,从最新 `main` 拉出
- [ ] 提交信息为**中文**且符合 Conventional Commits(含 `scope`),subject 无句末标点
- [ ] 提交粒度单一,无无关文件
- [ ] 无 `.env` / 密钥 / 大文件
- [ ] PR 描述含背景 / 影响面 / 回滚方式 / 验证证据
- [ ] CI 全绿,Review 通过,Squash 合并