問題
git commit -S -m "commit message"
したところ、以下のようなエラーが出た。
error: gpg failed to sign the data
fatal: failed to write commit object
対処法
(0. そもそもGPG鍵を生成した覚えがない方へ)
「そもそもGPGって何?そんなもの生成した覚えない」という方は以下の記事が参考になると思う。
1. 鍵のIDを調べる
まず、gpg --list-secret-keys --keyid-format LONG
でssbのIDを調べる。このとき、
ssb rsa2048/67983FDC1DEBDACB 2021-02-06 [S]
ssb rsa2048/67983FDC1DEBDACB 2021-02-06 [SE]
のように[ ]内に"S"が含まれた鍵を選ぶようにする。そのような鍵がない場合はステップ2へ、ある場合はステップ3に飛ぶ。
2. Usageフラグを編集する
GPGキーの利用法(Usage)フラグが誤っているので、修正するか新しく鍵を作り直す。
修正する場合は以下のようにする。名前などは適宜読み替えてほしい。
実際に入力する行の頭には米印をつけている。
※$ gpg --edit-key キーに設定した名前(Real name)
gpg (GnuPG) 2.2.27; Copyright (C) 2021 Free Software Foundation, Inc.
This is free software: you are free to change and redistribute it.
There is NO WARRANTY, to the extent permitted by law.
Secret key is available
sec rsa2048/4D08708603E2AC85
created: 2021-02-06 expires: 2023-02-06 usage: SC
trust: ultimate validity: ultimate
ssb rsa2048/67983FDC1DEBDACB
created: 2021-02-06 expires: 2023-02-06 usage: E
[ultimate] (1). goahi <goai@protonmail.com>
※gpg> key 1
sec rsa2048/4D08708603E2AC85
created: 2021-02-06 expires: 2023-02-06 usage: SC
trust: ultimate validity: ultimate
ssb* rsa2048/67983FDC1DEBDACB
created: 2021-02-06 expires: 2023-02-06 usage: E
[ultimate] (1). goahi <goai@protonmail.com>
※gpg> change-usage
Changing usage of a subkey.
Possible actions for a RSA key: Sign Encrypt Authenticate
Current allowed actions: Encrypt
(S) Toggle the sign capability
(E) Toggle the encrypt capability
(A) Toggle the authenticate capability
(Q) Finished
※Your selection? s
Possible actions for a RSA key: Sign Encrypt Authenticate
Current allowed actions: Sign Encrypt
(S) Toggle the sign capability
(E) Toggle the encrypt capability
(A) Toggle the authenticate capability
(Q) Finished
※Your selection? q
sec rsa2048/4D08708603E2AC85
created: 2021-02-06 expires: 2023-02-06 usage: SC
trust: ultimate validity: ultimate
ssb* rsa2048/67983FDC1DEBDACB
created: 2021-02-06 expires: 2023-02-06 usage: SE
[ultimate] (1). goahi <goai@protonmail.com>
※gpg> save
この段階で一度git commit -S -m "commit message"
でコミットできるか試してみる。無事コミットできたら終了。失敗したら次のステップへ。
3. GitにGPGキーを追加
ssb rsa2048/67983FDC1DEBDACB 2021-02-06 [SE]
例えばこの場合、67983FDC1DEBDACB
の部分がIDとなる。
Gitにgit config --global user.signingkey <鍵のID>
でGPG鍵を追加する。ここまででコミットできるようになっているはず。
4. それでもコミットできないとき(一部のLinux環境)
~/.zshrc
や~/.bashrc
など使用するシェルの設定ファイルに以下を追記してターミナルを再起動する。また、これを追記してもVSCodeからターミナルを利用するとコミットできないことがあるので、その際はターミナルを直接起動する。
export GPG_TTY=$(tty)