关于提交签名验证
您可以本地签名提交和标记,以便其他人确认您的工作来自可信的来源。 如果提交或标记具有密码可验证的 GPG 或 S/MIME 签名,则 GitHub 会将提交或标记标示为已验证。
如果提交或标记具有无法验证的签名,则 GitHub 会将提交或标记标示为未验证。
安装GPG命令行工具
GPG 并未默认安装在 OS X 或 Windows 上。 要安装 GPG 命令行工具,请参阅 GnuPG 的下载页面。
也可以用 过 Homebrew 来安装 brew install gnupg
检查现有 GPG 密钥
在生成 GPG 密钥之前,您可以检查是否有任何现有的 GPG 密钥。
$ gpg --list-secret-keys --keyid-format LONG
检查命令输出以查看是否有 GPG 密钥对。
- 如果没有 GPG 密钥对,或者您不想使用任何可用于签名提交和标记的密钥对,则生成新的 GPG 密钥。
- 如果存在现有的 GPG 密钥对并且您要将其用于签名提交和标记,则将 GPG 密钥添加到 GitHub 帐户。
生成新的 GPG 密钥
如果没有现有的 GPG 密钥,您可以生成新的 GPG 密钥以用于签名提交和标记。
-
生成 GPG 密钥对
$ gpg --full-generate-key
-
在提示时,指定要生成的密钥类型,或按
Enter
键接受默认的RSA and RSA
。 -
输入所需的密钥长度。 密钥必须至少是
4096
位。 -
输入密钥的有效时长。 按
Enter
键将指定默认选择,表示该密钥不会过期。 -
验证您的选择是否正确。
-
输入您的用户 ID 信息。
-
输入安全密码。
-
列出您拥有其公钥和私钥的 GPG 密钥。 签名提交或标记需要私钥。在此例中,GPG 密钥 ID 是
0B4436F611DCD0EC
$ gpg --list-secret-keys --keyid-format LONG /Users/xsky/.gnupg/pubring.kbx ------------------------------ sec rsa4096/0B4436F611DCD0EC 2021-01-06 [SC] B9476F6DF471A45A0CFDF9710B4436F611DCD0EC uid [ 绝对 ] linsheng (Github key) <linsheng1@xsky.com> ssb rsa4096/15B24F4064D2384D 2021-01-06 [E]
-
生成GPG密匙
$ gpg --armor --export 0B4436F611DCD0EC
-
复制 GPG 密钥,从
-----BEGIN PGP PUBLIC KEY BLOCK-----
开始,到-----END PGP PUBLIC KEY BLOCK-----
结束。
新增 GPG 密钥到 GitHub 帐户
要配置 GitHub 帐户使用新的(或现有)GPG 密钥,您还需要将其添加到 GitHub 帐户。
-
在任何页面的右上角,单击您的个人资料照片,然后单击 Settings(设置)。
-
在用户设置侧边栏中,单击 SSH and GPG keys(SSH 和 GPG 密钥)。
-
单击 New GPG key(新 GPG 密钥)。
-
在 "Key"(密钥)字段中,粘贴在生成新的 GPG 密钥时复制的 GPG 密钥。
-
单击 Add GPG key(添加 GPG 密钥)。
-
要确认操作,请输入您的 GitHub 密码。
将您的签名密钥告知 Git
要在本地对提交签名,您需要通知 Git 您想要使用的 GPG 密钥。
1. 在 Git 中设置 GPG 签名密钥,请粘贴下面的文本,替换您想要使用的 GPG 密钥 ID。 在此例中,GPG 密钥 ID 是 0B4436F611DCD0EC
:
$ git config --global user.signingkey 0B4436F611DCD0EC
-
如果没有使用 GPG Suite,请粘贴下面的文本以将 GPG 密钥添加到您的 bash 配置文件:
$ test -r ~/.bash_profile && echo 'export GPG_TTY=$(tty)' >> ~/.bash_profile $ echo 'export GPG_TTY=$(tty)' >> ~/.profile
**注:**如果您没有
.bash_profile
,此命令会将 GPG 密钥添加到.profile
。 -
如果在加密时意外退出,在加密时会报错:
error: gpg failed to sign the data
,此时运行gpgconf --kill gpg-agent
重启gpg-agent
对提交签名
可以使用 GPG 在本地对提交进行签名。在计算机上的任何本地仓库中默认对所有提交签名,请运行
$ git config --global commit.gpgsign true
要存储 GPG 密钥密码,以便无需在每次对提交签名时输入该密码,我们建议使用以下工具:
-
当本地分支中的提交更改时,请将 S 标志添加到 git commit 命令:
$ git commit -S -m your commit message
-
如果您使用 GPG,则创建提交后,提供您生成 GPG 密钥时设置的密码。
-
在本地完成创建提交后,将其推送到 GitHub 上的远程仓库:
git push
-
查看关于已验证签名的更多详细信息,请单击 Verified(已验证)。