Catwalk

エンジニアしてます。

Gitの署名

Read time 4 min read

Gitで署名を使う

GitにはGPG1を利用して、コミット(およびタグ)に暗号化した署名を付与可能。2

細かいやり方はGit公式やGithub、GitLabのドキュメントを調べればいくらでも出るが、大まかには以下の流れ。

  1. gpgで秘密鍵と公開鍵を用意する。
  2. 公開鍵をGithubやGitLabでアカウントに追加する。
  1. Gitで鍵を利用する設定をする。以下の設定を入れる。
git cofig --global user.signingkey <Key info>
  1. コミット実施やタグ付与時にコマンドオプションで署名する。
# コミットの場合(-Sオプションの追加)
git commit -S -m "commit message"

# タグの場合(-aの代わりに-sオプション)
git tag -s v1.0.0 -m "tag message"

ただ、調べた限り、クラウドベンダーが提供するAWS CodeCommit等では公開鍵の追加ができなかったりする。

署名する意味

署名とその検証は信頼できるソース(ユーザなど)からのコミット、変更で有ることを証明する。

署名をする意味もこれを担保すること。

仮に署名がない場合、gitの--auhtorでコミットしたユーザをごまかせる。3

本当に全部にするのか。いつ署名をするべきか。

確かに上記をやれば、コミットした人を証明でき、GithubやGitLabでかっこいい感じになるのかもしれない。

でも本当にするべきか。

調べて見た感じは以下だった。

全てに付与する理由は前述の署名をする理由をあげていた。

タグにコミットするのが良い派はLinusの主張をあげて示していた。4

Linusの主張56を読んで思ったのは以下の通り。

ここまで踏まえて、個人的な利用方針は以下。

会社やチーム、組織、マージ戦略等に応じても少し変える可能性は有るが、いいお勉強になりました。

Footnotes

  1. https://gnupg.org/

  2. https://git-scm.com/book/en/v2/Git-Tools-Signing-Your-Work

  3. https://binx.io/2021/12/06/why-you-should-start-signing-your-git-commits-today/

  4. https://news.ycombinator.com/item?id=12290873

  5. https://lore.kernel.org/all/20090415185554.GG23644@curie-int/T/

  6. https://lore.kernel.org/lkml/CAHk-=whFAkqwGSNXqeN4KfNwXeCzp9-uoy69_mLExEydTajvGw@mail.gmail.com/