关于 vcs-identity-check
vcs-identity-check 是提交前的版本控制身份核验技能,检查姓名、邮箱和签名配置,并在需要时请求确认或建议修复。
主要功能
- 01读取 Git、hg 和 jj 身份
- 02检查姓名与邮箱格式
- 03检查提交签名状态
- 04匹配历史提交签名意图
- 05身份无效时阻止提交
适用场景
- 01提交前确认作者信息无误
- 02定位提交签名配置异常
- 03为未启用签名的 Git 提交提供建议
安装
复制下面的命令,在终端中运行。
npx skills add https:/ / github.com/ petr-korobeinikov/ skills --skill vcs-identity-check安装后在 Claude Code 中输入/vcs-identity-check确认已加载。
详细介绍
vcs-identity-check
在提交前验证 VCS 身份, 确保提交正确归属, 并在未配置提交签名时给出建议。
流程
-
读取当前使用的 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。
- git →
-
检查:
- 姓名非空, 至少包含 2 个以空白字符分隔的部分, 且不是纯电子邮件地址。 两部分规则假设采用名在前、姓在后的命名习惯; 对于只有一个部分姓名的人 (例如某些印度尼西亚或冰岛命名习惯), 经用户明确确认后接受该值, 并跳过此项检查;
- 电子邮件非空,
且恰好包含一个
@,@两侧至少各有一个字符。
-
读取签名配置:
- 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为空)— 运行时提交将无法签名。
此步骤仅提供信息, 本身不会阻止提交。
- git →
-
如果之前的提交已匹配,则提前结束。 如果此仓库中同一作者之前的提交与当前配置的签名意图一致, 则跳过第 5 步的确认和签名建议 — 用户之前已在此配置下提交, 相当于默认确认过该设置。
对于 git,运行
git log -1 --author="<email>" --pretty=format:'%G?'并在以下情况下视为匹配:- 之前的提交带有签名(
%G?≠N), 且当前签名状态为已配置;或 - 之前的提交没有签名(
%G?=N), 且当前签名状态为未配置。
这里比较的是意图(签名 / 不签名),而不是密钥, 因此无论使用 GPG 还是 SSH 都适用, 不受
user.signingkey写法影响 (密钥 ID、指纹、是否带0x…前缀, 或公钥文件路径)。其他所有情况 — 此作者没有之前的提交、 配置错误状态,或非 git VCS — 都继续执行第 5 步。
- 之前的提交带有签名(
-
显示解析出的值并请用户确认 — «
<First> <Last>(来自<scope>)— 顺序正确、没有拼写错误吗?».<scope>为 git 报告的值(local/global/system); 对于 hg/jj,如果能获取配置文件来源,则注明该文件名,否则省略。 无法自动检测姓名顺序; 必须由用户确认。 在同一条消息中:- 签名状态为未配置 → 加上以下签名部分中的建议;
- 签名状态为配置错误 → 明确指出不一致的设置, 并将其视为必须立即修复的问题,而非建议。
-
如果任何身份检查失败或用户拒绝确认,则停止。 不要继续提交。
修复
- 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
然后将公钥上传到托管平台的签名密钥设置中。