Files
lingxi/docs/工程规范/01-Git规范.md
T
Stev_Wang dd01b89214
ci / 质量门禁 (push) Canceled after 0s
docs(docs): 调整分支策略为仅 main 直推
背景:用户确认仓库只保留 main,不再创建任何远程分支或走 PR 合并。

改动:
- 01-Git规范 V1.1:仅 main 直推,禁止非 main 分支推送、force push 与 Merge commit;
- AGENTS V1.1:变更流程改为直接提交并推送 main;
- 07-CodeReview:PR 模板改为提交说明,合并流程改为推送与推送后观察;
- 03/06/工程规范 README 同步去除 PR 措辞;
- CI 仅保留 push main 与 workflow_dispatch 触发。

影响面:仅流程与文档,无代码/数据/接口变更。
回滚方式:git revert 本提交即可恢复旧流程。
验证:format:check、lint、typecheck 全绿(10/10)。
2026-11-02 17:40:01 +08:00

138 lines
6.3 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.1(2026-11-02) |
| 依据 | 技术架构 §4.6(CI/CD)、§10.1(仓库结构) |
| 适用范围 | 全仓库(代码、文档、配置、迁移) |
| 强制级别 | 强制 |
---
## 1 分支模型
采用 **仅 main 直推**:仓库只保留 `main` 一条分支,不建 `develop`、`release`、`feat/*`、`docs/*` 等任何本地或远程分支。
| 类型 | 名称 | 用途 | 生命周期 |
| ---- | ------ | ------------------------ | -------- |
| 主干 | `main` | 唯一长期分支,始终可发布 | 永久 |
规则:
- `GIT-01` 所有提交直接基于最新 `main`;提交前先 `git pull --ff-only`,避免落后。
- `GIT-02` 禁止创建并推送任何非 `main` 分支;确需本地验证时可临时创建,但不得推送,完成后立即删除。
- `GIT-03` 允许直接 push `main`;推送前必须通过本地门禁(`format:check`、`lint`、`typecheck`、`test`),推送后立即确认 CI。
- `GIT-04` 禁止 force push `main`;禁止 Merge commit;`main` 必须保持线性。
## 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 提交、推送与 Review
- `GIT-12` 直接推送到 `main` 的提交即主干提交,提交信息按 §2 执行。
- `GIT-13` 禁止 Merge commit 等分支合并方式;一次提交只做一件事,`main` 保持线性。
- `GIT-14` 单个提交变更 ≤ 400 行(含测试,不含 lock 与生成代码);里程碑批次超出须在提交说明注明原因与拆分计划。
- `GIT-15` 禁止 force push `main`;已推送提交不回改写,修复一律用新提交前向修复。
- `GIT-16` Review 要求见 [07-CodeReview与PR规范](07-CodeReview与PR规范.md):高风险变更推送前完成双人走查,普通变更至少自查并在推送后 24 小时内走查。
## 4 Tag 与发布
| 项 | 规则 |
| --- | --- |
| 版本号 | 语义化 `v<主>.<次>.<补>` |
| 打 Tag 时机 | 生产发布前,由发布负责人在 `main` 打 annotated tag |
| 里程碑 Tag | `m0` / `m1` / `m2`…(对应 PRD 分期),仅标记不进版本链 |
| 发布记录 | 每个 Tag 必须写变更摘要(可复用提交标题集合) |
| 回滚 | 回滚用新 Tag(`v1.2.1` 回滚 `v1.2.0` 内容),**禁止删除已发布 Tag** |
---
## 5 大文件与二进制
- `GIT-17` 禁止入库 > 10 MB 的二进制(PSD 模板、成片、视频、字体包),一律走对象存储;确需入库(如开源字体)用 **Git LFS** 并在提交说明。
- `GIT-18` 禁止入库:`.env*`、密钥、证书私钥、构建产物、`node_modules/`、日志、`项目参考/`。
- `GIT-19` `pnpm-lock.yaml` 必须提交且与 `package.json` 同步;**禁止**手工编辑 lock 文件。
- `GIT-20` 误提交敏感信息:立即轮换密钥 → 用 `git filter-repo` 清理历史 → 全员重新 clone → 记录复盘。
---
## 6 检查清单(提交前 / 推送前)
- [ ] 提交基于最新 `main`,已同步远端
- [ ] 提交信息为**中文**且符合 Conventional Commits(含 `scope`),subject 无句末标点
- [ ] 提交粒度单一,无无关文件
- [ ] 无 `.env` / 密钥 / 大文件
- [ ] 提交说明含背景 / 影响面 / 回滚方式 / 验证证据
- [ ] 本地门禁全绿,已 push `main` 并确认 CI