使用 GPG 签名 Git 提交
文章目录
介绍
使用 GPG 签名的提交在 GitHub 的历史记录中显示为绿色的 Verified
字样,便于人们确定提交的确是由你提交的。
环境
软件版本均是截止至 2017-08-27 的最新版本。
Windows
- git-for-windows 2.14.1
- gpg 1.4.21
- Gpg4win-2.3.4
macOS
- git 2.14.1
- gpg 2.1.23
目标
Windows 与 macOS 使用相同的 gpg 密钥。
步骤
因为 git-for-windows 自带的 gpg 版本较低,选择首先在 Windows 上创建密钥。完成后导出到 macOS。
Windows
首先在 Windows 上按照 GitHub 官方文档 Signing commits with GPG - User Documentation 一步步做下去就可以。
完成后你就可以正确地签名提交了,推送到 GitHub 上会看到绿色的 Verified
字样,表明已经配置正确。
将以下所有 DEADBEEF
替换为你的密钥。
macOS
安装 gpg
|
|
导出密钥
|
|
传输到 macOS 上
导入
gpg --import gpg/privatekey.txt
macOS 上需要上一步 Windows 上的部分设置:
|
|
在配置好后提交时还是有问题:error: gpg failed to sign the data
,参考 github - gpg failed to sign the data fatal: failed to write commit object [Git 2.10.0] - Stack Overflow
- bash 将
export GPG_TTY=$(tty)
加入到~/.bash_profile
。 - fish 将
set -x GPG_TTY (tty)
加入到~/.config/fish/config.fish
。
问题
Windows 上一直提示输入密码
如果在创建密钥的过程中设置了 passphrase,那么在每次提交、变基等操作时都会提示输入密码。 但是 git-for-windows 自带的 gpg 版本较低,并不支持保存 passphrase。
这时可以选择将密钥导入到 Gpg4win 中,有两种方法:
- 命令行:参考这篇文章 Signing GitHub Commits With A Passphrase-protected Key and GPG2 – somewhat abstract
- 图形界面:打开
开始菜单
>Gpg4win
>Kleopatra
,选择Import Certificates
,在弹出的对话框中选择用户目录下的.gnupg\secring.gpg
文件即可。
修改 git 使用的 gpg 路径:
git config --global gpg.program "C:\Program Files (x86)\GNU\GnuPG\pub\gpg.exe"
密钥未经受信任的签名认证!
git log --show-signature
时发现提交被识别为密钥未经受信任的签名认证!
|
|
将密钥设为可信即可,执行下面的命令,在弹出的列表中选择信作程度即可:
gpg --edit-key DEADBEEF trust
Windows 下需要先将命令行切换到 C:\Program Files (x86)\GNU\GnuPG\pub\
再执行。
文章作者 狂飙
初次发布 2017-08-27 08:15:44 +0800
永久链接 https://networm.me/2017/08/27/signing-git-commit-with-gpg/