7DGroup 开源 dsh-skill-7d-git-commit 插件 文章目录项目信息功能特性项目结构快速开始通过 dsh CLI 安装在 dsh 会话中安装推荐构建与测试使用方式提交规范与 GitLab 集成使用集成功能说明背景为什么要做提交信息校验设计原理选择 pre-receive 阶段拦截工作原理实践落地参考文章的手动部署方式踩坑部署服务端 hook规则同步观察期巡检与钉钉日报切换硬拦截注意事项许可证作者7DGroup一个 DSHDeepSeek Harness组合层插件包通过ctx.skills注册7d-git-commit技能。在生成任何git commit提交信息前自动按7DGroup 项目提交规范进行校验规避 gitlab 服务端pre-receivehook 拦截。零核心改动——安装即启用移除 bundle 行即卸载。项目信息项目值作者7DGroup版本0.1.0-rc.3运行环境Node ^22.19.0Peer 依赖deepseek-ai/cordis·deepseek-ai/dsh-skill·deepseek-ai/dsh-invariants技能名称7d-git-commitGitLab 兼容性GitLab CE 19.2.0服务端 hooks仓库地址github.com/7dgroup-ai/dsh-skill-7d-git-commit许可证MIT功能特性在git commit执行前进行客户端提交规范预判。支持 9 个固定中文类型标签【新增】、【修复】、【优化】、【调整】、【删除】、【文档】、【测试】、【回滚】、【合并】。校验标题长度、末尾标点、禁用字符/短语、动宾句式等规则。正文格式校验数字序号逐条罗列、每行 ≤70 字符。支持 Merge commit 与紧急发版[skip-check]豁免。内置事实来源references/git-commit-message.md按需加载不撑大提示词。纯组合包挂载不打 DSH 核心补丁。项目结构dsh-skill-7d-git-commit/ ├── src/ │ ├── index.ts # Cordis 插件注册技能提供者 │ └── invariant.ts # 包所有权不变量伴生插件 ├── assets/7d-git-commit/ │ ├── SKILL.md # 技能体校验逻辑 │ └── references/ │ └── git-commit-message.md # 7DGroup 提交规范事实来源 ├── assets/images/ │ └── 7d-git-commit-cover.jpg # README 封面图 ├── tests/ │ └── skill-7d-git-commit.spec.ts ├── cordis.patch.yml # 组合层补丁 ├── tsdown.config.ts # 自包含转译配置 ├── package.json └── README.md / README.zh.md快速开始前置条件dshCLI、Node^22.19.0 || 24.0.0、pnpm 10。通过 dsh CLI 安装dsh plugin--profilewebaddgithub:7dgroup-ai/dsh-skill-7d-git-commit首次 git 安装时pnpm 会拒绝运行构建脚本需要把 pnpm 打印的确切包键写入该 profile 的pnpm-workspace.yaml→allowBuilds然后重新执行命令。如需跳过构建授权可使用预构建 tarball 或发布后的 npm 包dsh plugin--profilewebadd7dgroup/dsh-skill-7d-git-commit在 dsh 会话中安装推荐最直接的方式——在任意 dsh 会话中直接告诉助手它会替你执行安装。使用 GitHub 地址形式npm 包名7dgroup/dsh-skill-7d-git-commit需等发布到 npm 后才能使用安装插件 github:7dgroup-ai/dsh-skill-7d-git-commit助手会在会话内通过 Shell 执行对应的dsh plugin命令。git 安装时会遇到同样的 pnpmallowBuilds门禁助手会打印需要添加进 profile 的 pnpm 设置文件~/.dsh/profiles/name/pnpm-workspace.yaml的确切授权键添加后让助手重试即可完成安装。构建与测试pnpminstallpnpmbuild# tsdowngit 安装时也会以 prepare 钩子运行pnpmtest# vitest使用方式安装后在 dsh 会话中提到任意与提交相关的需求即可触发为当前改动生成一条 commit message。也可以使用斜杠命令显式触发技能/7d-git-commit触发内容示例为当前改动生成一条 commit message。帮我把这次的改动写一条提交信息。检查我的提交信息是否符合 7DGroup 提交规范。修正这条 commit message让它通过规范校验。技能会执行分析改动内容。从 9 类标签中选择最匹配的类型。撰写标题【类型】 动宾短语≤50 字符无末尾标点。复杂改动补充数字序号详情每行 ≤70 字符。按校验清单逐项检查不合规则提示修正。提交规范完整规则见assets/7d-git-commit/references/git-commit-message.md。核心要求标题格式【类型】简短描述标题长度去标签后 ≤50 字符末尾禁止。.,标题/正文禁用字符 # $ % ^ * ~禁用短语待优化、TODO、FIXME、个人情绪等临时备注正文每行 ≤70 字符使用数字序号逐条罗列与 GitLab 集成使用本插件同时提供客户端 DSH skill 与服务端 GitLab hook建议组合使用形成客户端预判 服务端兜底的双层校验。**兼容性说明**服务端集成方案已适配并在GitLab CE 19.2.0上验证通过custom hooks 规则配置。客户端assets/7d-git-commit/SKILL.md在git commit前校验提交信息。服务端docs/gitlab-integration/pre-receive在git push到达仓库前校验并告警/拦截。规范来源assets/7d-git-commit/references/git-commit-message.md客户端与服务端共用同一套规则。集成功能说明背景为什么要做提交信息校验每接收一份新版本代码第一件事往往是查看 git log。如果提交记录杂乱无章、看不出每次提交做了什么对他人 review 和后续维护都很痛苦。规范的提交记录CHANGELOG不仅有助于他人 review 代码也能高效输出 Release Note对版本管理至关重要。因此考虑用 GitLab 服务端 hook 对 git change log 做校验拦截不符合规范的提交。设计原理选择 pre-receive 阶段拦截GitLab 服务端 hook 分为三种对应 push 完成后服务端的处理流程Hook阶段作用pre-receive推送前用户 push 之后刚到 GitLab 服务器内用于拦截用户的推送update更新中提交更新到 GitLab 仓库内post-receive推送后提交到 GitLab 成功之后用于推送通知处理流程示意非 00用户 pushpre-receive推送前拦截结束推送不合规提交被拒绝update提交更新到仓库post-receive推送通知在pre-receive推送前阶段做提交信息校验如果不符合规范脚本直接以非 0 退出该推送便不会进入 GitLab 仓库。工作原理pre-receive从标准输入读取本次推送的信息oldrev newrev refname旧 commit id、新 commit id、分支名再用git log取出提交者、提交日期与提交注释最后用正则校验标题是否以约定前缀开头参考文章示例fix|add|del|update|temp|test|revert|Merge不匹配则输出错误并exit 1拒绝推送。实践落地参考文章的手动部署方式找到仓库物理路径GitLab 自某版本起采用 hash 存储需通过管理员账号获取仓库对应的物理路径形如/srv/gitlab/data/git-data/repositories/hashed/78/5f/785f3ec7...git。创建 custom_hooks在仓库目录下新建custom_hooks目录再创建pre-receive文件shell 脚本。赋予执行权限chmod x pre-receive。本地 push 验证不符合规范的提交会推送失败符合规范则正常推送。本仓库docs/gitlab-integration/是上述方案的工程化实现遍历 stdin 全部 ref而非只读第一行、warn/reject 双模式、规则外置到commit-rules.conf、审计日志与钉钉日报可直接用install-hooks.sh一键部署见下文。踩坑GitLab 不同版本自带的 git 版本不一致相同命令的输出也可能不一致需要特别注意。例如git log --no-merges --date-order -1在不同 git 版本下输出格式存在差异脚本不要依赖未验证的命令输出。参考文章GitLab 服务端 hook 拦截提交到仓库部署服务端 hook将docs/gitlab-integration/目录复制到 GitLab 服务器然后执行# 单仓试点sudobashinstall-hooks.sh--pilotdevops/7dgroup# 试点验证通过后推广全局sudobashinstall-hooks.sh--global规则同步当本仓库中docs/gitlab-integration/commit-rules.conf变更后sudobashscripts/sync-rules.sh--global--dry-runsudobashscripts/sync-rules.sh--global观察期巡检与钉钉日报# 生成 Markdown 日报sudobashscripts/audit-report.sh--markdown# 推送钉钉机器人exportDINGTALK_WEBHOOKhttps://oapi.dingtalk.com/robot/send?access_tokenxxxsudo-Ebashscripts/dingtalk-notify.sh切换硬拦截完成docs/gitlab-integration/switch-to-reject-checklist.md。将部署后的commit-rules.conf中MODE改为reject。下次 push 立即生效。完整部署 SOP 见docs/gitlab-integration/deployment-guide.md。注意事项该提供方只贡献一个固定 skill不提供运行时自定义。prepare构建不附带类型声明dsh Loader 只加载运行时入口。构建只做转译dts: false没有 lint 或类型检查脚本——类型错误只能在编辑器/IDE 中暴露。docs/gitlab-integration/目录文件不进入 DSH 运行时包请按需复制到 GitLab 服务器使用。许可证MIT · Copyright © 2026 7DGroup