有啥用

签名标签后,该标签别人无法修改(没有私钥),你也可以将公钥传到项目里来校验标签

初始配置

安装 GPG

可以选择下载源码,自己编译安装。也可以通过安装编译好的二进制包。

  1. # Debian / Ubuntu 环境
  2. $ sudo apt-get install gnupg
  3. # Fedora 环境
  4. $ yum install gnupg

我使用的是 Git for Windows 里面默认包含 GPG。
使用命令

  1. $ gpg --help

显示 GPG 帮助,就表示安装成功。

生成密钥

签名要使用公私钥,所以要提前生成。

  1. $ gpg --gen-key

直接写入你的名称和邮件,在填写上密码,具体过程可以看 GPG入门教程
使用如下命令查看本地已有的密钥

  1. $ gpg --list-keys
  2. /c/Users/Administrator/.gnupg/pubring.kbx
  3. -----------------------------------------
  4. pub rsa2048 2020-06-17 [SC] [expires: 2022-06-17]
  5. 0DB9053D1311EA7292BCEB5D7348643066956661
  6. uid [ultimate] yikang <1115610574@qq.com>
  7. sub rsa2048 2020-06-17 [E] [expires: 2022-06-17]

打标签并签名

  1. $ git tag -s v1.5 -m 'my signed 1.5 tag'
  2. // or 指定标签
  3. $ git tag -s v1.5 -m 'my signed 1.5 tag' [ -u | --local-user] "yikang"

成功的话没有任何输出,错误的话会输出错误信息

将签名以标签的方式发布到项目上

Git 中可以使用 blob 对象来保存公钥,可以通过 git hash-object 来将 key 导入到 Git 的数据库中

  1. $ gpg -a --export 0DB9053D1311EA7292BCEB5D7348643066956661 | git hash-object -w --stdin
  2. 659ef797d181633c87ec71ac3f9ba29fe5775b92

--export 后的内容是你的 GPG 公钥,可以通过 gpg --list-keys 查看。上述命令会返回该 blob 对象的 SHA-1 值,可以创建一个标签来该对象:

  1. $ git tag -a maintainer-pgp-pub 659ef797d181633c87ec71ac3f9ba29fe5775b92

紧接着可以运行 git push --tags 来发布到服务器上,其他人就可以拉取代码,查看到该信息。需要校验标签的人可以通过从数据库中直接拉取 blob 对象并导入到 GPG 中来导入 PGP key:

  1. $ git show maintainer-pgp-pub | gpg --import

人们可以使用这个 key 来校验所有由你签名的标签。

验证标签

使用 git tag -v [tag_name] 来验证签名。注意,前提是你拥有该公钥。

  1. $ git tag -v v1.5
  2. gpg: Signature made Wed Jun 17 16:47:39 2020
  3. gpg: using RSA key 0DB9053D1311EA7292BCEB5D7348643066956661
  4. gpg: issuer "1115610574@qq.com"
  5. gpg: Good signature from "yikang <1115610574@qq.com>" [ultimate]
  6. object cd5eeb776a4b4d73b653aa1f5fc5bd8869e85e01
  7. type commit
  8. tag v1.5
  9. tagger yikang <1115610574@qq.com> 1592383659 +0800
  10. my signed 1.5 tag

如果没有公钥,就会报错误信息

参考链接