概述
最近计划给一个开源软件,做一些英译中的翻译,看了他的 Readme 之后,发现他们需要贡献者的提交是被 verify 的。也就是说你的每次 git commit 都是被自己签名过的提交它们才会接受,在这个需求下,因此看下了,如何给你的 git commit 配置签名。
我的操作是在 Mac 电脑上,所以下面的教程适合苹果电脑,如果是 window 或者其他的Linux 系统,可以参考给出的英文链接。
环境配置
(第一次用)主要的步骤如下:
安装加密工具
- 安装 GPG 工具用于签名。工具GPGTools下载地址,或者直接
brew install gnupg pinentry-mac
. - 验证是否安装成功,可以通过终端中,输入
gpgconf
查看输出信息。
生成加密的公钥和私钥
- 在终端中输入
gpg --full-generate-key
来生成公私钥;期间会让你输入,加密类型选择,RSA,秘钥长度选择 4096,密钥的有效期,根据自己的需求来吧,我选的是无期。 - 然后就是输入你的用户 id 信息,主要两部分,就是用户名和邮箱,一旦设置好之后,你的使用的用户名和邮箱是不能再配更改的,属于强绑定关系。这里建议,用户名根据你的自己的使用习惯,但是邮箱一定要设置成GitHub 提供的 noreply emai(不要使用自己的私人邮箱)。在你的 GitHub 邮箱页面 中会显示,类似于
**261025+<username>@users.noreply.github.com
这种。 - 然后就是输入一个安全短语,这个根据自己需要,我输入的是空字符;
- 生成和确认之后,可以通过
gpg --list-keys
来查看秘钥列表。
输出的结果秘钥的 Key 大概长这样:
pub
rsa4096 2022-01-05 [SC]
CBA9C7B9F5F8122345943134FB39B4DB3EE146023
uid
<user.name> <30542109+gitid@users.noreply.github.com>
sub
rsa4096 2022-01-05 [E]
其中密钥的 Key 就是 CBA9C7B9F5F8122345943134FB39B4DB3EE146023。
如果你之前已经生成好了秘钥,希望重新导入,可以使用 gpg --import <path to your private gpg.key>
来导入。
开启你的 Commit 签名
配置好前面的之后,你需要做的就是将公钥上传到 Github,并且本地开启 commit 签名功能。
-
你需要将你的公钥给复制到 Github 上的秘钥管理页面,提交上你前面生成的秘钥对的公钥;用如下命令,查看你的公钥,并且复制到剪切板中
gpg --armor --export CBA9C7B9F5F8122345943134FB39B4DB3EE146023 | pbcopy
-
在秘钥管理页面上新增上面的内容
-
本地的 git 用户名和邮箱必须修改成同前面配置一致,不然会抛出错误,且无法 commit。
error: gpg failed to sign the data fatal: failed to write commit object
-
本地 git 配置加密 key 和是否自动开启 commit 签名。
git config --global user.signingkey CBA9C7B9F5F8122345943134FB39B4DB3EE146023 git config --global commit.gpgsign true
如果只是轻量级的使用 commit 签名功能,可以通过每次 commit 前,增加 -S
来实现对单次 commit 的提交签名。例如,git commit -m "Test GPG" -S
。
如果遇到签名后提交遇到问题
error: gpg failed to sign the data
fatal: failed to write commit object
可以通过参考如下链接 github - gpg failed to sign the data fatal: failed to write commit object [Git 2.10.0] - Stack Overflow
一键创建不需要输入密码的GPG签名
可以按照如下方法创建
gpg --batch --gen-key <<EOF
Key-Type: 1
Key-Length: 4096
Subkey-Type: 1
Subkey-Length: 4096
Name-Real: 爱穿格子裤
Name-Email: 30542109+gitid@users.noreply.github.com
Name-Comment: anything your wanted
Expire-Date: 0
%no-protection
EOF
详细参数解释可以参考 Unattended GPG key generation (Using the GNU Privacy Guard)
最后
以上就是着急橘子为你收集整理的如何给你的 Git 提交进行签名的全部内容,希望文章能够帮你解决如何给你的 Git 提交进行签名所遇到的程序开发问题。
如果觉得靠谱客网站的内容还不错,欢迎将靠谱客网站推荐给程序员好友。
发表评论 取消回复