Vigorous Pro

The world can always use more heroes.

  1. 1. 基本要求
  2. 2. 生成 GPG Key
  3. 3. 导入 GPG key
  4. 4. 将 GPG key 保存到 GitHub
  5. 5. 启用 GPG 签名
    1. 5.1. 单次 Commit 签名
    2. 5.2. 每次 Commit 都签名
  6. 6. 参考链接

GPG 是一个非常出色的加密软件。为 Commit 带上 GPG 的签名就是一个很好的开始,它能够在一定程度上保证安全性。写本文的另一个原因是,之前经常查看的大佬的博客打不开了,就研究了一下,准备自己写一篇。

基本要求

git 版本 >= 2.0

已经安装 GPG (可通过输入gpg --version,确保已经安装)

生成 GPG Key

在终端/命令提示行中输入

gpg --full-generate-key

此处的交互选项推荐为:

  • RSA and RSA (Default)
  • 4096
  • 过期长度请自行选择,不知道的话,可输入 0 (默认值),即永不过期

接下来便需要输入您的个人信息了,此处的邮箱需要与 Github 对应

导入 GPG key

此部分为将其他位置导出密钥,导入至当前设备中,不需要的话,可直接跳过此步骤

此处文件名以 edison.gpg 为例

gpg --import edison.gpg

此处需要输入之前设置好的密钥密码。
导入完成后,还需要更改密钥的信任度,因为是我们自己的密钥,所以将信任度设置为 Ultimate

首先,输入下面的代码,查看自己所有的 GPG key

gpg --list-secret-keys --keyid-format LONG

输出内容如下(示例)

/home/edison/.gnupg/pubring.kbx
------------------------------------
sec   4096R/1234567890ABCDEF 2019-04-23 [expires: 2019-04-23]
uid    ***********SECRET***********
ssb   4096R/FEDCBA0987654321 2019-04-23

其中 sec 部分的 1234567890ABCDEF 就是我们刚刚生成的 GPG key 的 ID,我们要修改这个密钥的信任度,所以输入

gpg --edit-key 1234567890ABCDEF
// 修改 1234567890ABCDEF 为实际ID
trust
//修改信任度

此处输入 5,即完全信任。

将 GPG key 保存到 GitHub

输入下面的命令显示完整的 GPG key, 此处要注意将 1234567890ABCDEF 修改为实际内容

gpg --armor --export 1234567890ABCDEF

复制输出的全部内容

-----BEGIN PGP PUBLIC KEY BLOCK-----
………………
-----END PGP PUBLIC KEY BLOCK-----

访问 GitHub -> Settings -> SSH and GPG keys -> New GPG key,将复制好的 GPG key 粘贴到输入框并保存。

启用 GPG 签名

接下来便要为 Git 启用 GPG 签名了,首先设置自己的 GPG key
输入

git config --global user.signingkey 1234567890ABCDEF

单次 Commit 签名

在提交 Commit 时,添加 -S 即可对本次 git 进行签名

git commit -S -m "HAHAHAHA I'm Using GPG now"

每次 Commit 都签名

执行下面的命令即可,日后提交 Commit 的时候也不需要再加 -S

git config --global commit.gpgsign true

提交 Commit 的效果就会是这样了。

Commit

参考链接

使用 GPG key 签名你的 Git 提交

How to solve gpg: invalid option “–full-generate-key”?

怎样为你的 Commit 加上 GPG 的签名

unsplash-logoPavel Brodsky

本文作者 : Edison Jwa
本文使用 署名-非商业性使用-相同方式共享 4.0 国际 (CC BY-NC-SA 4.0) 协议
本文链接 : https://www.wevg.org/archives/git-gpg-sign-commit/

本文最后更新于 天前,文中所描述的信息可能已发生改变