ccusage 仓库提交规范实战:基于 git apply 的原子化 Conventional Commits 工作流
AI 应用CLI开发工具【免费下载链接】ccusagenpx ccusage项目地址https://gitcode.com/gh_mirrors/cc/ccusage点击查看免费下载本篇文章深入解读 ccusage 仓库内置的commit技能.agents/skills/commit/SKILL.md完整还原这套由仓库维护者沉淀的提交规范如何用git apply --cached以 hunk 粒度暂存补丁、如何保证每个提交可独立回滚、如何撰写符合 Conventional Commits 规范的 subject 与 body以及commit-msghook 如何依据暂存路径自动校验 scope。读完本文你将掌握一套可以直接复用的原子化提交方法论并理解 ccusage 仓库从「提交 → 推送 → PR → CI 校验」全链路的工程约束。技能定位何时触发 commit 技能在 ccusage 的 Agent 技能体系中路由清单见 AGENTS.mdcommit技能负责「原子化 Conventional Commits 与基于补丁的暂存」其前置声明frontmatter明确了三类触发场景提交代码变更将一个 diff 拆分成多个可独立回滚的 hunk以非交互方式暂存精确的补丁或编写提交信息。技能支持一个可选参数参数默认值说明pushfalse提交完成后是否立即推送置为true时执行推送流程典型调用方式是/commit与/commit pushtrue。注意这条技能不是普通文档而是仓库内 Agent如 Claude Code在提交时会按需加载的「任务期指令」其信息组织遵循「渐进式披露」原则——根级 AGENTS.md 只保留路由与全局策略具体工作流全部下沉到技能文件。工作流全解析从状态读取到确认提交技能定义的四步工作流每一步都服务于「原子且可回滚」这个核心目标。第 1 步读取状态与近期历史git status --short git diff HEAD git log --oneline -10这一步的目的不只是弄清改了什么而是匹配仓库日志中已有的粒度、scope 与解释风格。ccusage 采用 Rust 优先的多适配器仓库结构rust/adapters/agent对应不同编程 Agent提交历史中的 scope 习惯如fix(kimi)、feat(codex)本身就是后续 scope 校验的依据来源。第 2 步按 hunk 而非按文件拆分 diff拆分单位是「hunk」补丁块而不是「文件」——一个文件中可能同时包含多个不相关的逻辑变更应当被拆成多个提交。这为第 3 步的精确暂存奠定基础。第 3 步用 git apply 非交互式暂存git apply --cached -v patch技能明确解释了为什么必须用补丁git add -p与git add --interactive在仓库的 Agent 运行环境中会挂起hang因此补丁是唯一能只暂存文件一部分内容的方式。当补丁应用失败时需要阅读 .agents/skills/commit/references/git-apply.md 参考文档其中给出了完整的补丁应用工具箱场景参数说明应用前预检git apply --check patch先验证补丁能否干净应用查看受影响文件git apply --stat patch应用前列出将改动的文件尾随空白导致失败--whitespacefix自动修正空白问题部分 hunk 冲突--reject写入.rej文件而非整体中止上下文不匹配--ignore-whitespace忽略空白差异行尾不一致--ignore-space-change忽略空格数量差异撤销已应用补丁--reverse反向应用以撤销始终保留-v参数这样失败时能明确指出是哪个 hunk 被拒绝。第 4 步提交并确认提交完成后用git show HEAD复核确认提交内容与预期一致。Revertability可回滚性是提交质量的第一标准技能的「Revertability」章节给出了一个自检问题如果我单独回滚这个提交会不会破坏别的东西每个提交都必须能独立回答这个问题。仓库期望极小的提交tiny commits一条 review 意见、一处措辞修正、一次参考文件抽取都可以各自成为一个提交。但「小」不等于「部分」。技能特别区分了两种操作微提交一个提交只含一个关注点移动/重命名/抽取必须作为单个提交一次性落地同时包含「旧路径删除、新路径添加、引用更新、生成的链接同步」两侧内容避免提交处于半完成状态。此外不同的关注点必须分开提交——即便每个改动本身都是正确的合并提交也会导致回滚一个关注点时误伤无关工作。仓库的 PR 合并策略是 squash-merge见 .agents/skills/create-pr/SKILL.md 与 AGENTS.md因此review 修复应作为后续跟进提交堆叠stack而不是 amend 历史。git commit --amend仅限两类情况尚未发布的本地失误或用户明确要求。这一约定与 CONTRIBUTING.md 中「PR branches are squash-merged, so prefer small stacked follow-up commits」的表述完全一致。Messagessubject 与 body 的分工提交信息规范的核心是职责分离subject主题行命名被改变的工件或行为并且在提交列表中单独阅读时必须通顺。技能给出的对比示例极具说明性docs(skills): clarify reference routingbody 引用 CodeRabbit 反馈优于chore: address review feedback——前者说明「改了什么、为什么」后者只是描述动作本身。body正文面向 reviewer 的上下文在 72 列处换行覆盖问题problem、理由rationale、决策decisions与影响impact四个方面。commit-msg hook 与 scope 校验提交信息的最后一道防线是commit-msghook它运行 scripts/validate-commit-scope.nu。该脚本的核心规则当暂存路径位于rust/adapters/agent/下时scope 必须是该 Agent 名如fix(kimi)、跨领域 scope或当变更跨越多个 Agent 时工作区级 scoperust/adapters/common/派生出的 scope 是adapter而不是common仓库中没有任何其他路径会派生 scope其余变更的 scope 由作者自行选择。之所以要依据暂存路径校验而不是信任 subject脚本头部注释解释得很清楚仅看 subject 无法识破编造的 scope——feat(coding)单独读起来完全合理直到你发现实际改动的是 codex 的代码。因此它从git diff --cached --name-only读取所有权信息。格式纯格式化的变更是chore: format当 scope 规则适用时则为chore(scope): format。所有提交信息使用美式英语。scope 校验脚本的源码级实现从 scripts/validate-commit-scope.nu 的实现可以看出完整的校验逻辑白名单常量第 15-22 行CROSS_CUTTING_SCOPES [deps, release, pricing, revert]描述变更原因而非树的一部分、WORKSPACE_SCOPES [adapter, all, rust]仅当一次变更跨越多个 Agent 时额外接受以及 git 自动生成或后续重写的前缀[Merge , Revert , fixup!, squash!, amend!]这些前缀不要求 scopesubject 解析用正则^(?type[a-z])(?:\((?scope[^()])\))?!?: \S拆分类型与可选 scope路径归属映射owner-for-path只有rust/adapters/*参与映射——rust/adapters/common/*映射为adapteradapters/下带点的文件被视为文件而非 Agent其余路径返回null不参与推导三种裁决分支无适配器路径变更 → 作者自选 scope 成立单个归属 → scope 必须为该 Agent 名或跨领域 scope多个归属 → 必须取其中一个 Agent 名或覆盖全部的工作区 scope违规时通过reject打印普通错误信息并exit 1中止提交故意不用error make——后者会把信息埋在 Nushell 诊断输出里再被 git 缩进成噪音。Push功能分支 上游检查 全套 hooks由于main只能通过 PR 合入squash-merge提交必须发生在功能分支上。/commit pushtrue触发推送流程时需要先阅读 .agents/skills/commit/references/push.md# 1. 确认当前分支在 main/master 上必须停下先切到功能分支 git branch --show-current # 2. 检查是否有上游 git rev-parse --abbrev-ref --symbolic-full-name {u}有上游直接git push无上游先询问用户是否执行git push -u origin HEAD用户拒绝则跳过推送。推送后由 nix/git-hooks.nix 中配置的 hooks 接力校验失败属于正常验证流程的一部分——在新提交中修复而不是改写历史。按触发时机划分阶段hook校验内容pre-committreefmt全树格式化--no-cache避免 prek 并行调用时的缓存竞争pre-commitgitleaks protect对暂存内容做密钥扫描commit-msgcommit scope运行nushell scripts/validate-commit-scope.nu校验 scopepre-pushtreefmt-check--fail-on-change确认无未格式化文件pre-pushgitleaks detect全量密钥检测pre-pushoxlintTypeScript/JavaScript 静态检查pre-pushclippyRust 工作区clippy -D warnings警告即错误pre-pushnode testNode 内置测试运行器执行 apps/ccusage/src/cli.test.ts 与 nix/tools/models-dev-gen/compact.test.tspre-pushcargo test整个 Rust 工作区全目标测试可见一次pushtrue的提交会触发从格式、密钥、Lint 到全量单测的完整验证链任何一个环节失败正确的应对都是追加一个小型修复提交这正与「tiny commits」与「不 amend 已发布历史」的规范互相印证。与其他技能的分工commit技能只是仓库 Agent 工作流的一环它和周边技能形成清晰的职责边界.agents/skills/create-pr/SKILL.md负责分支、推 PR、AI review、CI 跟进与合并gh pr merge pr --squash --delete-branch其内部明确「提交来自 commit 技能所以保持原子且可独立回滚」.agents/skills/skill-creator/SKILL.md规定了技能文件的组织方式——SKILL.md保持 160 行以内、条件性细节下沉到references/*.md这正是 commit 技能将 git apply 与 push 细节拆成两个参考文件的原因.agents/skills/fix-ci/SKILL.md负责修复 CI 失败与提交 hook 失败后的修复流程衔接。总结ccusage 的commit技能是一套可独立迁移的提交工程规范其要点可以浓缩为五条hunk 级拆分用git apply --cached -v而非交互式命令暂存部分内容可回滚性优先每个提交都要能单独回滚且不破坏其他东西移动/重命名类操作则整体单提交落地subject 命名工件、body 交代背景72 列换行美式英语scope 由暂存路径推导commit-msghook 依据scripts/validate-commit-scope.nu强制rust/adapters/agent下的提交使用真实 Agent 名作 scope功能分支 squash-mergereview 修复用堆叠跟进提交不 amend 已发布历史推送后接受 treefmt、gitleaks、oxlint、clippy 与全量测试的逐层校验。这套规范之所以值得借鉴在于它把「代码可回滚性」这一工程原则落到了提交粒度、暂存工具、信息格式与自动化 hook 的每一个环节上——对于任何多 Agent、多适配器、多人协作的仓库都是一份现成的高质量蓝本。赞分享AI 应用CLI开发工具【免费下载链接】ccusagenpx ccusage项目地址https://gitcode.com/gh_mirrors/cc/ccusage点击查看免费下载相关推荐Theatre Git提交规范Conventional Commits实践Theatre Git提交规范Conventional Commits实践 你是否还在为项目提交历史混乱而烦恼团队协作时看不懂同事的提交意图本文将详细介绍前端ECC Git 工作流规范Conventional Commits 提交约定与高质量 Pull Request 实战指南ECC Git 工作流规范Conventional Commits 提交约定与高质量 Pull Request 实战指南 导读 本文面向在 ECCEffic人工智能AI 技能AI 插件AI 评测Agent 评测MCP Clients开发工具终极指南如何用Conventional Commits规范化你的Git提交信息终极指南如何用Conventional Commits规范化你的Git提交信息 Conventional Commits规范是一种轻量级的提交信息约定它为创文档创作声明:本文部分内容由AI辅助生成(AIGC),仅供参考

相关新闻

AI编程实战指南:从工具选型到项目落地的完整方法论

AI编程实战指南:从工具选型到项目落地的完整方法论

我最早用AI编程的时候,心态是"把需求丢进去,代码自己滚出来"。结果呢?生成得像模像样,一跑就报错,改了三轮又引入新问题,最后反而比手写还慢。后来我换了个思路:把AI当成一个执行力很…

2026/9/21 0:32:18 阅读更多 →
Flink 有状态流处理完全指南:从 Keyed State 到 Checkpoint 容错机制

Flink 有状态流处理完全指南:从 Keyed State 到 Checkpoint 容错机制

大数据流处理批处理数据工程 【免费下载链接】flink 项目地址: https://gitcode.com/gh_mirrors/fli/flink 点击查看 免费下载 有状态流处理是 Apache Flink 实现精确一次(exactly-once)容错与弹性扩缩容的基石。本文以 Flink 官方概念文档《…

2026/9/21 0:32:18 阅读更多 →
MXNet mxnet.image 模块实战指南:图像读取、解码、数据增强与迭代器 API 全解析

MXNet mxnet.image 模块实战指南:图像读取、解码、数据增强与迭代器 API 全解析

深度学习机器学习人工智能 【免费下载链接】mxnet Lightweight, Portable, Flexible Distributed/Mobile Deep Learning with Dynamic, Mutation-aware Dataflow Dep Scheduler; for Python, R, Julia, Scala, Go, Javascript and more 项目地址: https://gitcode.c…

2026/9/21 0:32:18 阅读更多 →

最新新闻

3个坑让你精通受不鸟了API重构

3个坑让你精通受不鸟了API重构

3个坑让你精通受不鸟了API重构 版本升级后 API 全变了,以前背熟的函数名现在全报错,看着文档像看天书。这种从入门到精通的断崖式下跌,是每个开发者在框架大版本迭代时都要经历的阵痛。别慌,今天不聊虚的,直接拆解底层源码,看看那些“受不鸟了…

2026/9/22 3:01:48 阅读更多 →
面试被问原理答不上来?十大励志电影手写实现保姆级教程

面试被问原理答不上来?十大励志电影手写实现保姆级教程

面试被问原理答不上来?十大励志电影手写实现保姆级教程 上周陪一个后端老哥模拟面试,问到“如何实现一个高可用的任务调度器”,他支支吾吾半天,把代码逻辑讲得七零八落。面试官皱眉问:“那如果任务执行失败,你的重试机制怎么保证幂等性?”他直接卡壳,…

2026/9/22 3:01:47 阅读更多 →
AI漫剧量产核心:一站式工作台如何实现情绪帧级工业化

AI漫剧量产核心:一站式工作台如何实现情绪帧级工业化

/* MD / 富文本中的 .toc(含博客园搬家等嵌套结构);.toc-box 在侧栏,不受影响 */#content_views .toc,/* 编辑器常在目录前后插入空 p(:empty 仍占 20px),一并去掉避免顶空隙 */#content_views.markdown_views > p:empty:has(+ .toc),#content_views.markdown_views …

2026/9/22 3:01:47 阅读更多 →
3个坑坑死Sandstorm:一文搞懂高并发优化实战

3个坑坑死Sandstorm:一文搞懂高并发优化实战

3个坑坑死Sandstorm:一文搞懂高并发优化实战 盯着屏幕上那一长串红色的StackTrace,你是不是也想砸键盘?报错信息像天书,堆栈溢出,内存泄漏,Sandstorm集群一高并发就卡死。别急,今天不整虚的,咱们 一文搞懂…

2026/9/22 3:01:47 阅读更多 →
涂铭源码解析:图解原理助你3步搞定项目架构选型

涂铭源码解析:图解原理助你3步搞定项目架构选型

涂铭源码解析:图解原理助你3步搞定项目架构选型 刚学完 Python 语法,变量循环都滚瓜烂熟,但真让你搭个能上线的项目,是不是瞬间大脑一片空白?看着满屏的代码不知从何下手,这才是大多数开发者最真实的困境。…

2026/9/22 3:01:47 阅读更多 →
中国多少个城市实战项目

中国多少个城市实战项目

3步搞定中国城市数量统计与性能优化 面试时被问“中国到底有多少个城市”,你张口就答“大概300多个”?面试官皱眉追问:“具体怎么算的?数据从哪来?百万级数据怎么快速查询?”你瞬间卡壳,大脑一片空白。这不是知识盲区,而是底层原理没吃透。在市政…

2026/9/22 3:00:47 阅读更多 →

日新闻

3台商务办公笔记本实测:手写实现环境配置,告别卡半天

3台商务办公笔记本实测:手写实现环境配置,告别卡半天

3台商务办公笔记本实测:手写实现环境配置,告别卡半天 配置环境就卡半天?别怪机器慢,多半是你没选对工具链。在Java、Go或Python的项目现场, 手写实现…

2026/9/22 0:00:41 阅读更多 →
剑帝加点速查手册:3分钟搞懂核心逻辑

剑帝加点速查手册:3分钟搞懂核心逻辑

剑帝加点速查手册:3分钟搞懂核心逻辑 面试被问原理答不上来,是不是常态?别慌。很多开发者对着 GitHub 开源仓库里的代码发呆,看似简单实则暗藏玄机。今天这份【剑帝加点】速查手册,直接带你拆解核心实现,把面试必考的原理讲透。…

2026/9/22 0:00:41 阅读更多 →
手写实现图片压缩网站核心:搞定WebP转换与质量调优

手写实现图片压缩网站核心:搞定WebP转换与质量调优

手写实现图片压缩网站核心:搞定WebP转换与质量调优 复制来的代码跑不通不知道怎么调?别慌,这种“复制粘贴地狱”在开发圈太常见了。尤其是做 图片压缩网站…

2026/9/22 0:00:41 阅读更多 →

周新闻

Flutter for OpenHarmony游戏卡片渐变背景实战:从原理到性能优化

Flutter for OpenHarmony游戏卡片渐变背景实战:从原理到性能优化

直接铺开项目本身吧。这几个月我一直在折腾一件事:用Flutter给OpenHarmony做一款游戏集合类的App,说白了就是把若干小游戏塞进一个壳里,用统一入口分发。这个方向本身不算新鲜,真正让我花了不少心思的,是首页那堆游戏卡…

2026/9/21 3:13:20 阅读更多 →
Word表格编号全攻略:从列表编号到题注交叉引用

Word表格编号全攻略:从列表编号到题注交叉引用

写Word文档,最让人头疼的往往是那些“看起来不起眼”的小问题。比如表格编号这事:今天在表后面多加了两个空白行,明天给客户交稿前发现整个章节的编号全部错位,光是挨个改序号就能耗掉大半个下午。我前阵子帮人整理一份上百页的技…

2026/9/21 2:19:36 阅读更多 →
从第一个站到第二个站:独立开发者的静态网站选型与落地实践

从第一个站到第二个站:独立开发者的静态网站选型与落地实践

1. 项目概述1.1 核心需求解析做独立开发者这几年,说实话,第一个网站上线的那天晚上我兴奋得没睡着。但等它跑了半年,流量惨淡、功能臃肿、代码自己都懒得看第二遍之后,我才慢慢琢磨明白一个道理:第一个网站是练手&…

2026/9/21 4:51:05 阅读更多 →

月新闻

持续集成 流水线自动化与 声明式交付 实践:原型怎样变成可用功能

持续集成 流水线自动化与 声明式交付 实践:原型怎样变成可用功能

持续集成 流水线自动化与 声明式交付 实践:原型怎样变成可用功能分类:[AI/大模型]细分主题:AI 增强型 CI/CD 流水线自动化与 GitOps 实践:Agent 工作流、工具调用与任务拆解:从原型到生产的验收清单很多团队在尝试用大…

2026/9/21 15:36:51 阅读更多 →
容器编排 生产环境运维与排障实战:复盘记录怎样真正派上用场

容器编排 生产环境运维与排障实战:复盘记录怎样真正派上用场

容器编排 生产环境运维与排障实战:复盘记录怎样真正派上用场分类:[工程技术]细分主题:Kubernetes 生产环境运维与排障实战:可复制的项目复盘模板与决策记录大部分团队的事故复盘报告,最后都变成了躺在 Confluence 或钉…

2026/9/21 15:36:51 阅读更多 →
容器 容器化技术与镜像安全管理:核心链路应该先拆哪一步

容器 容器化技术与镜像安全管理:核心链路应该先拆哪一步

容器 容器化技术与镜像安全管理:核心链路应该先拆哪一步分类:[工程技术]细分主题:Docker 容器化技术与镜像安全管理:核心链路的逐步实现与关键代码取舍面对一个积累了五六年历史包袱的单体架构应用(包含 Web 接口、后台…

2026/9/22 2:43:42 阅读更多 →