mcpField
V
vcs-identity-check

vcs-identity-check

github.com/petr-korobeinikov开发165 次安装14 周前更新
代码仓库

关于 vcs-identity-check

vcs-identity-check 是提交前的版本控制身份核验技能,检查姓名、邮箱和签名配置,并在需要时请求确认或建议修复。

主要功能

  1. 01读取 Git、hg 和 jj 身份
  2. 02检查姓名与邮箱格式
  3. 03检查提交签名状态
  4. 04匹配历史提交签名意图
  5. 05身份无效时阻止提交

适用场景

  1. 01提交前确认作者信息无误
  2. 02定位提交签名配置异常
  3. 03为未启用签名的 Git 提交提供建议

安装

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

$npx skills add https://github.com/petr-korobeinikov/skills --skill vcs-identity-check

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

详细介绍

vcs-identity-check

在提交前验证 VCS 身份, 确保提交正确归属, 并在未配置提交签名时给出建议。

流程

  1. 读取当前使用的 VCS 身份:

    • git → git config --show-scope --get user.name 和 git config --show-scope --get user.email (--show-scope 适用于 git ≥2.26; 它会在值旁边输出配置范围 — local / global / system);
    • hg → hg config ui.username, 然后按最后一组 <…> 拆分出姓名和电子邮件 (例如:Petr Korobeinikov <[email protected]> → 姓名 Petr Korobeinikov,电子邮件 [email protected]); 如果没有 <…>, 则将整个字符串视为姓名,电子邮件视为未设置;
    • jj → jj config get user.name / user.email。
  2. 检查:

    • 姓名非空, 至少包含 2 个以空白字符分隔的部分, 且不是纯电子邮件地址。 两部分规则假设采用名在前、姓在后的命名习惯; 对于只有一个部分姓名的人 (例如某些印度尼西亚或冰岛命名习惯), 经用户明确确认后接受该值, 并跳过此项检查;
    • 电子邮件非空, 且恰好包含一个 @, @ 两侧至少各有一个字符。
  3. 读取签名配置:

    • git → git config commit.gpgsign、 git config tag.gpgsign、 git config user.signingkey、 git config gpg.format;
    • jj → jj config get signing.behavior 和 jj config get signing.backend。

    将配置归为以下三种状态之一:

    • 已配置 — commit.gpgsign=true, user.signingkey 非空, gpg.format 已设置 (缺少 tag.gpgsign=true 是软警告,不视为配置错误);
    • 未配置 — commit.gpgsign 未设置或为 false, 且 user.signingkey 为空;
    • 配置错误 — 其他情况 (例如 commit.gpgsign=true 但 user.signingkey 为空)— 运行时提交将无法签名。

    此步骤仅提供信息, 本身不会阻止提交。

  4. 如果之前的提交已匹配,则提前结束。 如果此仓库中同一作者之前的提交与当前配置的签名意图一致, 则跳过第 5 步的确认和签名建议 — 用户之前已在此配置下提交, 相当于默认确认过该设置。

    对于 git,运行 git log -1 --author="<email>" --pretty=format:'%G?' 并在以下情况下视为匹配:

    • 之前的提交带有签名(%G? ≠ N), 且当前签名状态为已配置;或
    • 之前的提交没有签名(%G? = N), 且当前签名状态为未配置。

    这里比较的是意图(签名 / 不签名),而不是密钥, 因此无论使用 GPG 还是 SSH 都适用, 不受 user.signingkey 写法影响 (密钥 ID、指纹、是否带 0x… 前缀, 或公钥文件路径)。

    其他所有情况 — 此作者没有之前的提交、 配置错误状态,或非 git VCS — 都继续执行第 5 步。

  5. 显示解析出的值并请用户确认 — «<First> <Last> (来自 <scope>)— 顺序正确、没有拼写错误吗?». <scope> 为 git 报告的值(local / global / system); 对于 hg/jj,如果能获取配置文件来源,则注明该文件名,否则省略。 无法自动检测姓名顺序; 必须由用户确认。 在同一条消息中:

    • 签名状态为未配置 → 加上以下签名部分中的建议;
    • 签名状态为配置错误 → 明确指出不一致的设置, 并将其视为必须立即修复的问题,而非建议。
  6. 如果任何身份检查失败或用户拒绝确认,则停止。 不要继续提交。

修复

  • git,仓库本地: git config --local user.name "First Last" (以及 user.email)。
  • git,全局:同上,但使用 --global。
  • hg:在 ~/.hgrc 中设置 [ui] username = First Last <[email protected]>。
  • jj:jj config set --user user.name "First Last" (以及电子邮件)。

修复后重新运行检查。

签名

为提交签名是个好习惯: 这样审核者就能验证提交确实来自标注的作者, 而 GitHub / GitLab / Gitea 等平台会在已签名的提交上显示「已验证」徽章。 未配置签名时,建议配置。

有两种格式,可根据用户的设置选择:

  • GPG — 传统方式, 适用于所有托管 Git 的平台; 需要生成 GPG 密钥,并将公钥上传到托管平台的「GPG 密钥」设置中。
  • SSH — 重用现有 SSH 密钥, 除 git ≥2.34 和 ssh-keygen 外,无需额外工具; 适合尚未使用 GPG 的情况。 需要将公钥作为「签名密钥」上传到托管平台(与身份验证密钥分开)。

设置(git,全局):

GPG:

git config --global gpg.format openpgp
git config --global user.signingkey "<KEY-ID>"
git config --global commit.gpgsign true
git config --global tag.gpgsign true

SSH:

git config --global gpg.format ssh
git config --global user.signingkey "<path-to-public-key>"
git config --global commit.gpgsign true
git config --global tag.gpgsign true

然后将公钥上传到托管平台的签名密钥设置中。

评论

支持 Markdown