1. 什么提交验证

一言以蔽之: 验证提交的代码是作者写的. 因为git 允许配置usernameemail如果 A 用户和 B 用户都拥有对仓库 R 的提交权限, 那么 A 可以把其user配置为 B 的username, 这时就不知道某个commit到底是谁提交的, 从另一个方面说也无法证明某些代码是作者写的, 而提交验证正是这么一个措施去验证代码提交作者的身份. 如下图:

image-20230426170220144

第一个77f22aa是一个验证过的, 状态是: Verified, 而cdcf74d是未验证状态: Unverified

2. 如何实现提交验证

在这里仅说明SSH提交验证的实现, 除此之外 Github 还支持更多验证方式. 具体的实现步骤如下:

  • 开启git提交验证

    1
    2
    3
    git config --global commit.gpgsign true
    git config --global gpg.format ssh
    git config --global user.signingkey ~/.ssh/id_ed25519.pub

    注意

    user.signingkey 根据个人实际情况进行配置

  • 上传签名公钥

    1
    2
    # 拷贝公钥到剪切板
    pbcopy < ~/.ssh/id_ed25519.pub
    • 设置Vigilant mode , 该步骤可选

      登录 Github, 进入SSH and GPG Keys页面(https://github.com/settings/keys), 勾选下面的标记

      • Flag unsigned commits as unverified
    • 新建 Key

      在当前页面点击New SSH Key或者直接访问: https://github.com/settings/ssh/new 这个链接进入新建 Key 页面, 填写如下信息:

      • Title: Key 标题, 通过标题表达这个 Key 的用户

      • Key type: 选择Signing Key

      • Key: 粘贴拷贝的公钥内容即可

      最后Add SSH Key即可.

    注意

    Key type 一定要选择 Signing Key 而不是 Authentication Key

3. 测试

因为上一步配置了commit.gpgsign gpg.format user.signingkey, 所以验证就很简单了, 签名会在 commit 的时候自动进行.

1
2
3
4
touch temp.log
git add .
git commit -m 'test verify commit'
git push

push 代码后在 Gtihub 上对应的仓库中查看 commit 列表中查看 commit 的验证状态即可, 如果没有设置Vigilant mode则以前为做签名验证的不显示Unverified标签, 否则会显示.