有啥用
签名标签后,该标签别人无法修改(没有私钥),你也可以将公钥传到项目里来校验标签
初始配置
安装 GPG
可以选择下载源码,自己编译安装。也可以通过安装编译好的二进制包。
# Debian / Ubuntu 环境
$ sudo apt-get install gnupg
# Fedora 环境
$ yum install gnupg
我使用的是 Git for Windows 里面默认包含 GPG。
使用命令
$ gpg --help
显示 GPG 帮助,就表示安装成功。
生成密钥
签名要使用公私钥,所以要提前生成。
$ gpg --gen-key
直接写入你的名称和邮件,在填写上密码,具体过程可以看 GPG入门教程
使用如下命令查看本地已有的密钥
$ gpg --list-keys
/c/Users/Administrator/.gnupg/pubring.kbx
-----------------------------------------
pub rsa2048 2020-06-17 [SC] [expires: 2022-06-17]
0DB9053D1311EA7292BCEB5D7348643066956661
uid [ultimate] yikang <1115610574@qq.com>
sub rsa2048 2020-06-17 [E] [expires: 2022-06-17]
打标签并签名
$ git tag -s v1.5 -m 'my signed 1.5 tag'
// or 指定标签
$ git tag -s v1.5 -m 'my signed 1.5 tag' [ -u | --local-user] "yikang"
成功的话没有任何输出,错误的话会输出错误信息
将签名以标签的方式发布到项目上
Git 中可以使用 blob 对象来保存公钥,可以通过 git hash-object
来将 key 导入到 Git 的数据库中
$ gpg -a --export 0DB9053D1311EA7292BCEB5D7348643066956661 | git hash-object -w --stdin
659ef797d181633c87ec71ac3f9ba29fe5775b92
--export
后的内容是你的 GPG 公钥,可以通过 gpg --list-keys
查看。上述命令会返回该 blob 对象的 SHA-1 值,可以创建一个标签来该对象:
$ git tag -a maintainer-pgp-pub 659ef797d181633c87ec71ac3f9ba29fe5775b92
紧接着可以运行 git push --tags
来发布到服务器上,其他人就可以拉取代码,查看到该信息。需要校验标签的人可以通过从数据库中直接拉取 blob 对象并导入到 GPG 中来导入 PGP key:
$ git show maintainer-pgp-pub | gpg --import
人们可以使用这个 key 来校验所有由你签名的标签。
验证标签
使用 git tag -v [tag_name]
来验证签名。注意,前提是你拥有该公钥。
$ git tag -v v1.5
gpg: Signature made Wed Jun 17 16:47:39 2020
gpg: using RSA key 0DB9053D1311EA7292BCEB5D7348643066956661
gpg: issuer "1115610574@qq.com"
gpg: Good signature from "yikang <1115610574@qq.com>" [ultimate]
object cd5eeb776a4b4d73b653aa1f5fc5bd8869e85e01
type commit
tag v1.5
tagger yikang <1115610574@qq.com> 1592383659 +0800
my signed 1.5 tag
如果没有公钥,就会报错误信息