在macOS下利用GPG对Git commit签名

[scode type=“yellow”]

在macOS 11.1下测试经过过程。

  • gpg (GnuPG) 2.2.25
  • libgcrypt 1.8.7
  • pinentry-mac (pinentry) 0.9.4

[/scode]

安裝所需軟件

1
brew install gpg2 gnupg pinentry-mac

創建鑰匙對

1
gpg --full-generate-key

這裏建議利用--full-generate-key選項自定義全数選項,遵循提示輸入便可,加密编制選(1) RSA and RSA (default),密鑰長度可選擇最長4096

此中郵箱地址需要與Github中驗證通過的郵箱保持一致。

設置終端環境變量

1
export GPG_TTY=$(tty)

在這一步,設置GPG終端類型環境變量,目标是讓GPG法式知道利用什麽作爲終端,並使其生效:

1
source ~/.zshrc # 若是利用的是bash,更改成.bashrc

建设GPG代办代理

1
vim ~/.gnupg/gpg-agent.conf

將以下內容追加進入建设文件

1
pinentry-program /usr/local/bin/pinentry-mac

這樣,便可利用pinentry办理GPG密鑰了。

載入GPG代办代理建设

1
gpgconf --kill gpg-agent

通過殺死gpg-agent,確保建设文件被加載。

測試一下

1
echo "test" | gpg --clearsign

運行以上号令,對字符串test進行簽名以測試gpg是不是建设成功。

若是建设成功,應該會出現pinentry的窗口,選擇Save in keychain可以將密碼保存至鑰匙鏈。

正確輸入密碼後,可以看到信息和簽名。

獲取密鑰ID

1
gpg -K --keyid-format SHORT

執行成功應該會出現這樣的內容:

1
2
3
4
-------------------------------------
sec   rsa4096/<Key ID Short> 2020-12-27 [SC] [expires: 2024-12-26]
      <Key ID>
uid         [ultimate] example <example@example.com>

利用Key ID ShortKey ID都可。

在Git中設置密鑰

1
git config --global user.signingkey <Key ID>

通過以上号令可以在全局設置中建设密鑰ID。

開啓強制簽名

通過以上步驟便可以實現GPG簽名commit了,只需要添加-S選項便可,以下:

1
git commit -S -m "這是一條簽名過的commit"

可是爲了便利,我們可以通過全局設置來強制開啓GPG

1
2
git config --global commit.gpgsign true
git config --global tag.forceSignAnnotated true

此中第一個參數是默認開啓簽名,第二個參數是強制開啓簽名。


後記

在最初的建设過程完成後,我對我的一個倉庫進行commit操纵出現錯誤,以下:

1
2
error: gpg failed to sign the data 
fatal: failed to write commit object

通過插手GIT_TRACE=1?參數觀察Git的執行過程,我發現其卡死在了這個号令的執行上:

1
gpg --status-fd=2 -bsau <Key ID>

具體是什麽启事我並未做深究。


參考

利用 Hugo 構建
主題 StackJimmy 設計
xxfseo.com