使用GPG为Commit签名 GitHub Verified标签

664 阅读2分钟

问题

使用Gitub时发现有些Commit没有Verified标签,标签表示,这个Commit确实是Commiter本人所为,而没有该标签未必是本人提交的。要使Commit出现该标签可以使用GPG为Commit签名。

开始 生成GPG Key

安装Git 在Windows中打开Gitbash,Linux中打开Shell 输入 gpg --full-generate-key 并按照提示输入

最后输入O即可生成GPG密钥如下图

2021-12-22 09-16-14屏幕截图.png 公钥和私钥已经生成并被签名。

pub rsa4096 2021-12-22 [SC]
41058105E2045471D6F781C9F8130DCA3246FC4A
uid yuanczx (GitHub) <yuanczx@foxmail.com>
sub rsa4096 2021-12-22 [E]

其中41058105E2045471D6F781C9F8130DCA3246FC4A为密钥ID

导出公钥

gpg --armor --export [key_id]

$ gpg --armor --export 41058105E2045471D6F781C9F8130DCA3246FC4A
-----BEGIN PGP PUBLIC KEY BLOCK-----

********************************************************************

-----END PGP PUBLIC KEY BLOCK-----

复制从-----BEGIN PGP PUBLIC KEY BLOCK-----到-----END PGP PUBLIC KEY BLOCK-----的所有内容包括BLOCK

GitHub设置

  • 打开GitHub设置选择SSH and GPG keys点击New GPG key

    2021-12-22 09-30-29屏幕截图.png 将复制的内容粘贴并点击ADD GPG key 2021-12-22 09-32-22屏幕截图.png

  • 设置Git签名密钥

    git config --global user.signingkey [keyi_d]

    然后,在每次commit的时候,加上-S参数,表示这次提交需要用GPG密钥进行签名:

    git commit -S -m "..."

    也可以设置自动签名

    git config --global commit.gpgsign true

    至此提交Commit便会出现Verified标签

  • 导出GPG公私钥

    gpg --output mygpgkey_pub.gpg --armor --export [key_id]导出公钥

    gpg --output mygpgkey_sec.gpg --armor --export-secret-key导出私钥

  • 导入GPG密钥

    gpg --import ~/mygpgkey_pub.gpg导入公钥

    gpg --allow-secret-key-import --import ~/mygpgkey_sec.gpg导入私钥

参考:

知乎:在Github上使用GPG的全过程

CSDN:Windows下GPG的使用