mcpField
V
vcs-commit-msg

vcs-commit-msg

github.com/petr-korobeinikov开发170 次安装3 天前更新
代码仓库

关于 vcs-commit-msg

依据项目历史撰写符合既有风格的版本控制提交信息。它会识别惯例、询问不明确之处,并在提交前展示草稿供确认。

主要功能

  1. 01从历史记录分析提交风格
  2. 02支持 git、hg、jj 和 svn 日志
  3. 03询问不明确的惯例
  4. 04提交前审阅草稿
  5. 05移除 AI 署名

适用场景

  1. 01匹配仓库的提交信息风格
  2. 02厘清不明确的消息惯例
  3. 03提交前检查消息草稿

安装

复制下面的命令,在终端中运行。

$npx skills add https://github.com/petr-korobeinikov/skills --skill vcs-commit-msg

安装后在 Claude Code 中输入/vcs-commit-msg确认已加载。

详细介绍

vcs-commit-msg

编写符合项目现有风格的提交消息。 从历史记录中检测风格。 如果信号不够明确,就询问用户。 提交前展示结果。 绝不将更改归功于 AI Agent 或模型。

范围

此技能仅适用于提交消息文本。 不适用于分支名称、 PR 标题或描述、 标签消息, 或提交消息缓冲区以外的任何内容。

流程

1. 检测风格

编写前先抽样查看近期历史记录。

对于 git:

git log -n 100 --no-merges \
  --pretty=format:'--- commit ---%nauthor: %an <%ae>%nsubject: %s%nbody:%n%b'

每个提交都以 --- commit --- 块呈现,并明确包含 author:、subject: 和 body: 字段。 body: 为空表示该提交没有正文。

对于其他 VCS(hg、jj、svn), 使用各工具的日志/模板语法生成等效样本。 每个提交的输出必须包含:

  • 清晰的提交边界标记;
  • 作者姓名和邮箱;
  • 主题(消息的第一行);
  • 正文(其余各行,可以为空)。

对于 svn,请使用 svn log --xml, 因为 svn 没有灵活的模板语言。

过滤明显的机器人提交——尽力而为, 无需保证完全覆盖:

  • 作者邮箱或显示名称包含子字符串 [bot];
  • 作者邮箱为 [email protected], 或包含已知的机器人标记 (dependabot、renovate、github-actions、-bot@);
  • 主题匹配 ^Merge pull request # / ^Merge branch / ^Revert "。

允许少量机器人提交漏网—— 不要追求 100% 过滤。

对于下面的每个维度, 如果 ≥80% 的过滤后样本符合某一模式, 则判定该模式为主流; 否则,该维度为无法确定。

维度:

  • 主题格式 — Conventional Commits(feat: ...、fix(scope): ...)、 工单优先/任务优先前缀 (PROJ-123: ...、[PROJ-123] ...)、 普通祈使句(“Add ...”)、 描述性(“Added ...”、“Adds ...”), 或其他;
  • 语言 — 英语、俄语等;
  • 大小写 — 首字母大写/小写、 是否以句点结尾;
  • 主题长度上限 — 在 50、72、80 中,选择能满足 ≥80% 主题长度要求的最小值;
  • 是否有正文 — ≥80% 的提交有正文时,判定通常有正文; ≥80% 的提交没有正文时,判定通常没有正文;
  • 正文换行列数 — 在 72、80、100 中,选择能满足 ≥80% 正文行长度要求的最小值;
  • 常用尾注 — Signed-off-by、Closes #、Fixes #、Refs: 等。
2. 询问无法确定的维度

如果任何维度无法确定—— 包括空仓库,因为按定义所有维度都无法确定—— 请在编写前明确询问用户。 将所有问题合并到一条消息中; 不要逐个询问。

用户明确提出的要求——无论是语言还是其他维度—— 始终优先于检测结果。

3. 编写

按照检测到或选定的风格 编写主题(以及适用时的正文)。 对于工单前缀惯例, 从分支/书签名称中获取工单号; 如果名称中没有,则询问用户。 正文内容风格遵循检测到的惯例—— 不要用历史记录未体现的外部最佳实践取而代之。

4. 不归功于 AI

编写的消息不得以任何形式提及任何 AI Agent、模型或 工具(Claude、ChatGPT / GPT、Copilot、Cursor、Gemini、Aider、 Codex、Codeium / Windsurf、Replit AI、JetBrains AI、Tabnine、 Cody、Devin 等):

  • 不得添加 AI 账号的 Co-Authored-By: 尾注 ([email protected]、 [email protected]、 类似的机器邮箱地址);
  • 不得添加“Generated with ...”、 “Made by ...”、 “Authored by ...”等行;
  • 主题或正文中不得提及。

按照项目惯例,可以添加人类的 Co-Authored-By: 和 Signed-off-by 尾注。

无论提交消息缓冲区中已有何种内容,这些规则都从头适用—— 包括修改或重写提交时的旧消息、 commit.template 内容、 其他钩子或工具插入的文本, 或先前的草稿。 删除已有的任何 AI 归功内容; 不要沿用。

5. 应用前先展示

始终先向用户展示拟好的消息, 并询问是否合适,然后再提交。 简要说明从历史记录中检测到哪些维度, 以及哪些是用户手动确定的,让用户知道选项的依据。 只有在用户接受后,才使用 VCS 的标准提交/修正命令应用。

评论

支持 Markdown