mac 用 gpg key 签名 git 提交
环境准备
首先使用 Homebrew 安装 gnupg 和 pinentry-mac,执行以下命令:
brew install gnupg pinentry-mac
一点配置
为 gpg 和 gpg-agent 创建配置文件。
mkdir ~/.gnupg touch ~/.gnupg/gpg-agent.conf
配置Shell
正确设置 GPG_TTY
环境变量
You should always add the following lines to your .bashrc or whatever initialization file is used for all shell invocations:
(https://www.gnupg.org/documentation/manuals/gnupg/Invoking-GPG_002dAGENT.html#Invoking-GPG_002dAGENT)
echo "export GPG_TTY=$(tty)" >> ~/.zshrc source ~/.zshrc
提高使用密码时的用户体验
echo "pinentry-program $(which pinentry-mac)" >> ~/.gnupg/gpg-agent.conf
生成一个 GPG key
运行以下命令以生成一个 GPG key
gpg --full-generate-key
这个过程中需要回答一些问题:
密钥类型
Please select what kind of key you want: (1) RSA and RSA (2) DSA and Elgamal (3) DSA (sign only) (4) RSA (sign only) (9) ECC (sign and encrypt) *default* (10) ECC (sign only) (14) Existing key from card Your selection? 10
选择 (10) ECC (sign only)
ECC 加密用的算法
Please select which elliptic curve you want: (1) Curve 25519 *default* (4) NIST P-384 (6) Brainpool P-256 Your selection? 1
使用默认的 Curve 25519
即可。
key 的有效期
Please specify how long the key should be valid. 0 = key does not expire <n> = key expires in n days <n>w = key expires in n weeks <n>m = key expires in n months <n>y = key expires in n years Key is valid for? (0) 0 Key does not expire at all Is this correct? (y/N) y
为了易于使用,这里我们选择永不过期。
用户ID信息
GnuPG needs to construct a user ID to identify your key. Real name: FengYin Xu Email address: withfengyinxu@gmail.com Comment: You selected this USER-ID: "FengYin Xu <withfengyinxu@gmail.com>" Change (N)ame, (C)omment, (E)mail or (O)kay/(Q)uit? O
Comment 可以不用输入,如果是用于 Github,这里的用户名和邮件设置应该与 Github 账户的设置相同。
密码保护key
在经过上面一系列配置后,会出现一个让我们输入密码保护 key 的提示,可以输入自己想好的密码也可以不输入直接 OK。
然后我们就生成了一个新的 GPG key。
配置 Git 以使用 GPG key 签名
使用正确的 GPG 程序
git config --global gpg.program $(which gpg)
使用指定的 GPG key 签名
运行以下命令查看刚刚生成的 GPG key id,
gpg --list-secret-keys --keyid-format=long
上面👆命令的结果类似下面这个样子:
/Users/username/.gnupg/pubring.kbx ------------------------------ sec ed25519/xxxxxxxxx 2022-12-02 [SC] yyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyy uid [ultimate] FengYin Xu <withfengyinxu@gmail.com>
ed25519/
后面紧跟的那串 xxxxxxxxx
字符就是要使用的 key id,运行以下命令,让 Git 使用它。
git config --global user.signingkey xxxxxxxxx
使 Git 签名所有提交和标签
git config --global commit.gpgsign true git config --global tag.gpgSign true
实际使用
现在我们新建一个 Git 仓库并创建一个 README 文件来 commit 试一下:
mkdir git-sign-commits-with-gpg-key cd git-sign-commits-with-gpg-key git init touch README git add . git commit -S -m "README"
当最后一行命令回车时,会出现让我们输入密码的提示:
输入密码提交成功后,我们可以使用 git verify-commit
来检查签名的 commit。
VSCode 配套设置
用户配置json文件中增加一行
"git.enableCommitSigning": true,
更多
如果想让 Github 使用生成的 GPG key,请参见 Github 官方文档 Generating a new GPG key 的第 12~ 14 步。
本文作者:暮重云
本文链接:https://www.cnblogs.com/fengyinxu/p/signing-commits-with-gpg-key-on-macos.html
版权声明:本作品采用【知识共享署名-非商业性使用-禁止演绎4.0国际】许可协议进行许可。
【推荐】国内首个AI IDE,深度理解中文开发场景,立即下载体验Trae
【推荐】编程新体验,更懂你的AI,立即体验豆包MarsCode编程助手
【推荐】抖音旗下AI助手豆包,你的智能百科全书,全免费不限次数
【推荐】轻量又高性能的 SSH 工具 IShell:AI 加持,快人一步
· 无需6万激活码!GitHub神秘组织3小时极速复刻Manus,手把手教你使用OpenManus搭建本
· C#/.NET/.NET Core优秀项目和框架2025年2月简报
· Manus爆火,是硬核还是营销?
· 终于写完轮子一部分:tcp代理 了,记录一下
· 【杭电多校比赛记录】2025“钉耙编程”中国大学生算法设计春季联赛(1)