🐔

git の signingkey にフィンガープリントを指定する時は末尾に感嘆符が必要

2022/06/15に公開約2,000字

署名のすすめ

唐突だが git でコミット時に gpg の署名を付けているだろうか?
署名を付けておくと GitHub でコミットに って出て何となく箔が付いたように見えるから(気のせい)、みんなも付けるといいんじゃないかと思う。

それ、間違ってますから

で、そのためには git config -global commit.gpgsign true とか git config --global user.signingkey キー とかやる必要があるんだが、どうもこの user.signingkey の指定の仕方が正しく広まっていないように見える。

と言うのは、ここにフィンガープリントを指定する場合、最後に感嘆符(ビックリマーク、エクスクラメーションマーク、要は!)を付ける必要があるんだが、そう言った記載をあまり見かけないからだ。
むしろ誤った記載しか見かけない、とさえ言える。

GitHub のドキュメント

例えば、みんな大好き GitHub のドキュメントTelling Git about your signing keyを見てみると臆面もなく、

$ git config --global user.signingkey 3AA5C34371567BD2

と書いてある。
ダメですから!
これじゃ意味ないですから!
正しくはこう。

$ git config --global user.signingkey 3AA5C34371567BD2!

非常に気づきづらいが、最後に!が付いている。これ重要。

みんな間違ってる理由(?)

で、何でこんな事になってるのかと思ったら、なんと Git の公式サイトが間違ってやがった
GPG Introduction を見ると、

$ git config --global user.signingkey 0A46826A

と書いてある。
ちげーよ!
お前が間違えるなよ!
これ↓が正解。

$ git config --global user.signingkey 0A46826A!

しつこいようだが、最後に!が付いている。これ重要。
さすがに厳しいので一応プルリク出しといた。
⇒[2022/6/21 追記]マージされた(1バイト)、良かった…

なんで感嘆符?

user.signingkeygpg コマンドの --local-user にそのまま指定される、と git のドキュメントにしっかり書いてある。
つまり、指定するのは「ユーザ ID」であって「キー ID」ではない。

で、網羅的に書かれている訳では無いが、gpg のコマンドで「ユーザ ID」を指定する場所では、「キーID」の最後に! を付けたものも指定できることになっている。

つまり、そういうわけだ。(どういうわけだ?)

でも実は大丈夫かも…

これだけ間違った情報が出回ってて何で大丈夫なのかと言えば、間違った指定は単に無視されているから。つまり、指定されていないのと同じなのである。

指定されていないとどうなるかと言えば、署名できるキーが勝手に使われる。つまり署名できるキーさえあれば、ちゃんと署名されるというわけだ。

じゃあいつダメなのかと言えば、署名できるキーが複数あって、かつそれらを使い分けたい場合だけだ。
これは推測になるが、多分そんなヤツはあんまりいないから間違ってても気づいてないんじゃなかろうか。

正しく設定しよう

とは言え、間違った設定を残しておくのは気持ち悪いと思うので、正しく設定することをお勧めする。

そして、今回の教訓は公式サイトでも間違っていることはあるので気をつけよう、と言う事だ。(そうか?)

Discussion

ログインするとコメントできます