GitのGPG署名付きcommitとGitHubの連携で躓いた話

### あんた誰？

Nanai10a(なないじゅあ)と申します。
この世の最底辺の技能知識0/注意散漫erです。

### この記事は何？

今回はGitでGPG署名付きcommitをしてGitHubに上げていたら、いつのまにかUnverifiedになっていたお話をしていこうと思います。

### 環境

今回やっていく環境の詳細は以下の通りです。

```
OS : Windows 10 Home Edition
```

## Prologue

私は今年の6月頃から本格的にGit, GitHubを使うようになりました。
ちょうどその使い始めの時にGPG署名についてやGitの署名付きcommitについて聞いたり調べたり教わったりと、ちょっとだけかじっていました。
それで特に問題はなくGitの署名付きcommitでGitHubに`Verified`のバッヂをつけることに成功し、平穏に過ごしていました。

しかし最近になって`Unverified`の文字が…あれ？
私、設定したよな？

## その時何をしていたか

実はその時、あるbranchのcommit群を別branchに移したくて、

```powershell
git checkout #[移行先branch]
git cherry-pick #[commit]

git checkout #[移行元branch]
git reset HEAD~#[移行commit数]
```

なんて操作を行っていたんですね。
※branch管理はしっかりしましょうね！(自戒)

んで移行後のbranchのcommitがしっかり反映されてるかなと、GitHubにpushしまして…さてGitHubを開きますと、

`Unverified`

…あれ？？？

いいえ、目的自体は達成したのです。目的のcommitは私の思惑通り移行が完了していたのです。
しかし…`Unverified`…？？？

私は前に署名付きcommitの準備をして、成功したはずです。
なんだこれ。

調べてみると作業をしていた他のRepositoryの私のcommitもみんな`Unverified`…あれれれれれ？？？？？
何がどうしたというのだ。

## どうにかしようと闇雲に…

その時何故か私は
「きっとこの`cherry-pick`でしっかり署名ができていないのかも知れない、署名し直してみよう」と思い立ちまして。
臨時の別ブランチにcommitを移し、再び`cherry-pick`、加えて1commitづつ、

```powershell
git commit --amend -S
```

と明示的に署名を行いました。
まぁもちろん治るはずもなく。

というか最初から`cherry-pick`した時にGPGのパスフレーズを入力していたではありませんか。

まぁこんな事を繰り返して。
次はメールアドレスを疑ったわけです。

・GitHubに紐付けてあるアドレス
・GPG鍵に使われているアドレス
を確認しました。

…うん。同じものが紐付けられているな。

じゃあ鍵が間違っている？

再度GPG鍵をexportしてGitHubに貼り付けてみる。

```
Key already exists and Public key already exists
```

…うん。だって登録しましたから。そりゃそうでしょう。

…あれ、本当になんで？？？

## help me...

署名付きcommitに関することを調べ直しまして、同じ鍵で再度Gitに設定し直したりしました。
が、治らず。

「こりゃ駄目だな」と愚痴のように私はTwitterにtweetをし、怠けていました。

<script async src="https://platform.twitter.com/widgets.js" charset="utf-8"></script>

<blockquote class="twitter-tweet" data-lang="ja"><p lang="ja" dir="ltr">あ～～～～～～gpg署名どうしちまったんだよ～～！！！
Unverifiedだってぇ！？
まじでどうしたんだろ…</p>&mdash; Nanai10a (@771tenNext) <a href="https://twitter.com/771tenNext/status/1295271710195761154">2020年8月17日</a></blockquote>

しかしその数十秒後…

> Discord[某鯖](https://approvers.dev/)にて…
> >
https://twitter.com/771tenNext/status/1295271710195761154?s=20
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/623040/17c77153-54db-854e-9cda-821bdfaa54a1.png)
何だろうなと思ってみたらこれだったので、
Gitに設定されてるメールアドレスとGPG鍵に登録してあるメールアドレスが違うみたい
> >
> > ― φ

おっと？(φ氏については[後ほど]())

## 解決へ

という訳で

```powershell
git config --global user.email
```
```powershell
#[GPG鍵のものとは違うアドレス]
```

※[GPG鍵のものとは違うアドレス]はGitHubには紐付けてありますが
ふぅ～～～～～！！！！！(自分への憤りの音)

```powershell
git config --global user.email #[GPG鍵のものと同じアドレス]
```

さて運命の瞬間。

```powershell
git commit --amend
git push -f
```

※`commit.gpgsign` は `true`にしてあります

`Verified`

はい！！！！！！！

**解 決 ！ ！ ！ ！ ！**

## 余談

これなんで起きたのかはわかっていません…が、それに関わりそうな操作について一応

・GitHubアカウントに紐づけていたプライマリメールアドレスを変更していた
・そのメールアドレスを使ってIntelliJ IDEA CommunityやEclipse上でGitHubにログインする機会があった

もしかして…と思い書き残しますが、どっちにせよこちらの過失なのでなんとも…。
自分でGitの`user.email`を変更していた可能性も大いにあります…。

## まとめ

・Gitの署名付きコミットはGitと鍵に紐付けたメールアドレスが同じでないと駄目。

これに尽きる。
以上。

### φ氏について

名前は**loxygen**という方です。のだのだ言ってます。(「**φ**」はニックネームなので…)
(なんかニックネームをminimal化する風潮があるのでこうなっている、ちなみに私は「**.**」)
[某鯖](https://approvers.dev/)で色々とやっているお方です。(最近はBot開発に明け暮れていたかな)
ちょくちょく助けれられていて頭が上がりません…。
覗きに行ってあげて下さい。

HP : https://loxygen.dev/
Twitter本垢 : [@loxygenk](https://twitter.com/loxygenk)
GitHub : [loxygenK](https://github.com/loxygenK)