ARTICLE DETAIL

建站实战干货

来自一线的建站与推广经验沉淀,每一条都经过真实交付验证。

在 Nx 仓库中使用 /commit 命令:AI 辅助的规范化 Git 提交流程

2026/9/12 14:50:27 拓冰建站 浏览量
在 Nx 仓库中使用 /commit 命令:AI 辅助的规范化 Git 提交流程 在 Nx 仓库中使用 /commit 命令AI 辅助的规范化 Git 提交流程【免费下载链接】nxThe Monorepo Platform that amplifies both developers and AI agents. Nx optimizes your builds, scales your CI, and fixes failed PRs automatically. Ship in half the time.项目地址: https://gitcode.com/GitHub_Trending/nx/nx导读本文聚焦 Nx 主仓库当前工作目录GitHub_Trending/nx/nx内 Claude Code 自定义命令.claude/commands/commit.md所定义的/commit命令。它把一次合规的 Git 提交拆解为格式检查 → prepush 校验 → 测试 → 提交 → 汇报五个可复现的步骤并强制遵循 Nx 仓库基于 Conventional Commits 的提交信息规范。读完本文你将理解该命令的完整工作流、底层校验脚本的真实实现并能独立手动复现每一次提交确保提交信息通过 CI 与本地 hook 的验证。一、背景为什么 Nx 仓库需要一条专门的提交命令Nx 是一个拥有数百个包packages/下包含core、angular、react、next、node等 30 包的大型 monorepo。海量 PR 意味着提交信息必须机器可读release 脚本、变更日志生成、nx release版本计算都依赖规范化的提交信息。为此仓库做了三件事用 scripts/commit-lint.js 以正则校验提交信息格式check-commit用 scripts/commitizen.js 配置交互式提交工具pnpm commit约束 type/scope 的合法取值在 CONTRIBUTING.md 中写下完整的提交规范。而.claude/commands/commit.md则是把这些规范封装成一条面向 AI Agent 的命令——开发者在 Claude Code 中只需输入/commit [message]即可让 AI 按仓库标准完成一次高质量提交。二、/commit 命令总览用途、用法与执行步骤原文档对该命令的定义如下用途创建遵循 Nx 仓库标准与验证要求的 Git 提交Create a git commit following Nx repository standards and validation requirements。用法/commit [message]命令执行的工作提交前校验Pre-commit validation运行完整校验套件pnpm nx prepush确保代码质量格式化Formatting使用 oxfmt 自动格式化变更文件测试Testing对受影响的项目affected projects运行测试以验证改动创建提交Commit creation创建格式良好、信息规范的提交不附带 co-author 署名状态汇报Status reporting对提交过程给出清晰的反馈。工作流Workflow用 oxfmt 格式化所有已修改文件运行 prepush 校验套件校验通过后暂存相关变更stage用描述性信息创建提交总结本次提交的内容。需要说明的是仓库根目录 package.json 中暴露的脚本键为check-commit、check-format、check-imports、check-lock-files、check-codeowners等见package.json的scripts字段prepush是这些校验在nx目标编排下的聚合入口。这与文档中运行完整校验套件的描述一致。三、提交信息格式Conventional Commits 的 Nx 实现/commit命令要求提交信息遵循type(scope): subject格式首行不超过 72 个字符。这一规则并非文档独有而是有完整的脚本背书。3.1 校验正则的真实实现scripts/commit-lint.js 中的validateCommitMessage把合法 type 与 scope 拼装成正则const commitMsgRegex (${allowedTypes})\\((${allowedScopes})\\)!?:\\s(([a-z0-9:\\-\\s]));含义拆解片段说明(${allowedTypes})必须匹配预定义 type 之一\\((${allowedScopes})\\)必须带括号并匹配预定义 scope 之一!?可选允许!表示破坏性变更breaking change:type 与 subject 之间必须有冒号\\s(([a-z0-9:\\-\\s]))subject 必须为小写字母、数字、冒号、连字符或空格此外/Revert/gi、/Release/gi、/wip/gi三种特殊格式revert 提交、release 提交、wip 草稿会被放行。3.2 type 的合法取值来自 scripts/commitizen.js共 5 种type含义feat新功能A new featurefix缺陷修复A bug fixdocs仅文档变更Documentation only changescleanup既非修复也非新功能的代码变更chore不修改 src 或 test 文件的其他变更3.3 scope 的合法取值scripts/commitizen.js 中定义了 35 个 scope覆盖仓库全部技术面例如coreNx 核心逻辑拿不准时用这个angular、react、react-native、nextjs、remix、nuxt、vue、expo各前端框架/平台webpack、vite、vitest、rspack、rsbuild、rollup、esbuild构建与打包工具其中bundling为通用打包相关devkit、nx-plugin开发者工具链graph项目依赖图应用linterESLint/Oxlint 相关testingJest/Cypress 等测试相关module-federation、gradle、maven、docker、dotnet跨语言/容器支持release、repo、nx-dev、nx-cloud、misc发布、仓库治理、文档基础设施、云服务与杂项。配置中还包含几个值得注意的细节allowCustomScopes: false禁止自定义 scope、allowEmptyScopes: false不允许缺省 scope、maxSubjectLength: 100以及defaultScope会通过git status自动探测packages/下发生修改的包名作为默认 scope——这意味着改了哪个包scope 就自动预填哪个包。四、完整提交规范来自 CONTRIBUTING.md/commit命令是 CONTRIBUTING.md 中提交规范的自动化封装。规范原文要点如下。4.1 消息结构type(scope): subject BLANK LINE body4.2 主题与正文要求subject主题描述变更内容首行控制在 72 字符以内body正文提供更多上下文建议关联 issue 号方便追踪。4.3 官方示例feat(angular): add an option to generate lazy-loadable modules nx generate lib libs/mylib --lazy provisions the mylib project in .eslintrc.json Closes #1574.4 交互式提交工具文档明确说明Nx 是 Commitizen 友好仓库。与其手写git commit官方推荐pnpm commit该交互命令会依次引导你① 选择 typefeat/fix/docs/cleanup/chore② 从预定义列表选择 scope③ 撰写清晰的描述信息④ 确保符合 conventional commit 格式。/commit命令本质上就是把这套交互过程交由 AI 自动完成。4.5 提交前的质量门禁CONTRIBUTING 要求提交前确保运行nx format、通过pnpm check-commit校验提交信息格式、为文档更新运行pnpm documentation详见 CONTRIBUTING.md。五、/commit 与手动流程的对照实践下面给出与/commit等价的手动操作步骤便于你理解命令每一步在做什么也可用于无法使用 Claude Code 的场景。步骤 1格式化变更文件pnpm exec nx format:check # 快速检查等价于 check-format:quick pnpm exec nx format # 实际格式化含 oxfmt 对 Rust 等文件的支持根目录 package.json 对应的脚本为check-format: nx format:check --all全量检查与check-format:quick: nx format:check仅检查受影响文件。oxfmt 是仓库在 package.json 的devDependencies中声明的 Rust 格式化工具版本约束为oxfmt: ^0.60.0负责按统一风格整理变更文件。步骤 2运行 prepush 校验套件pnpm nx prepush该套件聚合了以下检查见 package.json 中的prepushtarget 依赖check-commitnode ./scripts/commit-lint.js校验提交信息正则check-format与check-format:quick格式检查check-importsnode ./scripts/check-imports.js检查依赖导入边界check-lock-filesnode ./scripts/check-lock-files.js锁定文件一致性check-codeownerstsx ./scripts/check-codeowners.ts校验 CODEOWNERS 规则。步骤 3测试受影响的项目pnpm nx affected -t test只对改动波及的项目运行测试这是 Nx 增量构建的核心价值——在大仓库中避免全量跑测试。步骤 4暂存并提交git add 相关文件 git commit -m feat(core): add new project graph visualization若担心格式不合规可先手动验证node ./scripts/commit-lint.js # 校验最近一次提交对照 upstream/master echo feat(core): add new option /tmp/msg node ./scripts/commit-lint.js /tmp/msg传入 commit message 文件时脚本会直接对文件内容做正则校验见 scripts/commit-lint.js不传参时则取git log -1 --no-merges的最近一条提交并尝试对照nrwl/nx.git上游分支剔除已合并的提交scripts/commit-lint.js。步骤 5查看校验反馈校验通过时脚本输出Commit ACCEPTED 失败时输出[Error]: Oh no! 并明确提示合法 type 列表、合法 scope 列表建议拿不准用core、subject 必须小写除非以Revert或Release开头以及正反示例见 scripts/commit-lint.js。六、原文档示例与规范化提交实战原文档给出的三个示例命令正是三种最常见的提交场景/commit feat(core): add new project graph visualization /commit fix(react): resolve build issues with webpack config /commit docs(nx): update getting started guide对应到手动写法git commit -m feat(core): add new project graph visualization git commit -m fix(react): resolve build issues with webpack config git commit -m docs(nx): update getting started guide结合第三节的正则可以验证它们全部合法type 在feat/fix/docs白名单内scope 在core/react/nx内nx不在commitizen.js的 scope 列表中若按脚本校验应以nx-dev、core等为准subject 全部小写且以空格分隔、无大写字母、无尾随标点。这也提醒我们即使交给 AI 提交最终合规性仍由 scripts/commit-lint.js 的正则兜底。七、常见问题与注意事项为什么要求不附带 co-author 署名原文档明确说明/commit创建的提交不含 co-author 归属这是为了保持仓库提交历史的作者信息干净避免 AI 协作产生的署名噪音污染 git blame 与贡献统计。prepush校验失败怎么办按第五节步骤逐项排查先nx format修复格式再针对失败项单独重跑如pnpm check-imports、pnpm check-commit全部通过后再提交。scope 拿不准该用哪个配置注释明确建议if unsure usecore且交互工具会自动从git status探测packages/下被修改的包作为默认 scope。subject 有哪些硬性约束必须小写Revert/Release 开头除外、首行 ≤ 72 字符工具内maxSubjectLength: 100为交互上限、不允许自定义 scope 与空 scope。破坏性变更怎么写在 scope 后加!如fix(core)!: breaking change should have exclamation mark该示例同样来自 scripts/commit-lint.js 的报错提示。八、小结/commit命令是 Nx 仓库把提交规范工程化为可执行流程的典型实践文档.claude/commands/commit.md定义工作流脚本scripts/commitizen.js、scripts/commit-lint.js落实约束package.json 暴露校验入口CONTRIBUTING.md 沉淀规范。理解这条命令你不仅能在 Claude Code 中一键完成合规提交也能在任何 Git 仓库中复制这套格式检查 → 校验 → 测试 → 提交的工程质量方法论。【免费下载链接】nxThe Monorepo Platform that amplifies both developers and AI agents. Nx optimizes your builds, scales your CI, and fixes failed PRs automatically. Ship in half the time.项目地址: https://gitcode.com/GitHub_Trending/nx/nx创作声明:本文部分内容由AI辅助生成(AIGC),仅供参考