ふとgitでcommitする際に署名をつけてみたいと思いやってみました。
GitHubにgpg署名付きのコミットをするを参考にしましたが、現在では一部うまく動かなかったところがあったので一部変更しながら紹介します。
Mac環境(macOS Mojave)で検証しました。
TL; DR
# 必要なツールをインストール
$ brew install gpg2 pinentry-mac
# 鍵を生成
$ gpg --full-gen-key
# 生成した鍵のIDを調べる
$ gpg --list-secret-keys --keyid-format LONG
# Gitの設定
$ git config --global gpg.program gpg
$ git config --global user.signingkey {鍵のID}
# gpgの設定
echo "pinentry-program /usr/local/bin/pinentry-mac" > ~/.gnupg/gpg-agent.conf
gpgconf --kill gpg-agent
# 署名付きでコミットする
git commit -S
gpgをインストールする
gitではgpgを使ってコミットに署名をつけることができます。(詳細はこちら)
必要なツールをbrewでインストールします。
$ brew install gpg2 pinentry-mac
以前はgpg-agentもインストールしていましたが、現在はgpg2の中に統合されたようです。
No available formula with the name "gpg-agent"
鍵生成
署名に使う鍵を生成します。
$ gpg --full-gen-key
その後色々と聞かれるので適宜設定していきます。
オプションを細かく設定したかったので--full-gen-key
を指定しましたが、こだわりがなければ--gen-key
でも構いません。
名前とメールアドレスはgitで設定しているものと同じにしましょう。下記のコマンドで確認できます。
$ git config --get user.name
$ git config --get user.email
gitの設定を変更する
はじめに生成した鍵のIDを確認します。
$ gpg --list-secret-keys --keyid-format LONG
/Users/ユーザ名/.gnupg/pubring.kbx
--------------------------------
sec rsa4096/{鍵のID} 2019-01-25 [SC]
***
uid [ultimate] 名前 <メールアドレス>
ssb rsa4096/*** 2019-01-25 [E]
確認した鍵のIDをgitに登録します。
$ git config --global gpg.program gpg
$ git config --global user.signingkey {鍵のID}
gnupgの設定をする
~/.gnupg/gpg-agent.conf
に設定します。
pinentry-program /usr/local/bin/pinentry-mac
その後設定を反映するためにgpg-agentを一度終了させます。
gpgconf --kill gpg-agent
署名時に自動起動するので再び起動する必要はありません。
How can I restart gpg-agent?
上記の手順を行わなかったため、コミット時に
error: gpg failed to sign the data
fatal: failed to write commit object
とエラーが出て署名付きでコミットできませんでした。
署名付きでコミットする
git commit -S
-S
オプションをつけることで署名できます。
GitHubに鍵を登録
$ gpg --armor --export {鍵のID} | pbcopy
pbcopyは出力をPasteboard(クリップボード)にコピーします。
あとはGitHubの鍵の設定からNew GPG Keyをクリックし、
出てくるテキストボックスに貼り付け、Add GPG Keyをクリックします。
あとがき
以上で署名付きでコミットができるようになるはずです。
もし間違いなどがあればご指摘いただければ幸いです。
Reference
https://qiita.com/kentfordev/items/0e44f563caf39cd3eb9e
https://git-scm.com/book/ja/v2/Git-のさまざまなツール-作業内容への署名
https://github.com/pstadler/keybase-gpg-github/issues/30
https://superuser.com/questions/1075404/how-can-i-restart-gpg-agent/1150399