介绍

使用 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

1
2
brew update
brew install gpg

导出密钥

1
2
gpg -a --export-secret-keys DEADBEEF > privatekey.txt
gpg -a --export BAADF00D > publickey.txt

传输到 macOS 上

导入

gpg --import gpg/privatekey.txt

macOS 上需要上一步 Windows 上的部分设置:

1
2
git config --global user.signingkey DEADBEEF
git config --global commit.gpgsign true

在配置好后提交时还是有问题: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 中,有两种方法:

修改 git 使用的 gpg 路径:

git config --global gpg.program "C:\Program Files (x86)\GNU\GnuPG\pub\gpg.exe"

密钥未经受信任的签名认证!

git log --show-signature 时发现提交被识别为密钥未经受信任的签名认证!

1
2
WARNING: This key is not certified with a trusted signature!
gpg:          There is no indication that the signature belongs to the owner.

将密钥设为可信即可,执行下面的命令,在弹出的列表中选择信作程度即可:

gpg --edit-key DEADBEEF trust

Windows 下需要先将命令行切换到 C:\Program Files (x86)\GNU\GnuPG\pub\ 再执行。