Tips

Gitで署名付きCommitsやtagを作る

signcommits

Git で署名付きCommitを行うメモ

GitHubとかでCommitを見てると、GnuPGで署名されたCommitや、

Signed-off-by: John Doe

で署名+GnuPGの署名のついたCommitがありますよね

やってみましょう

GnuPG

まずはGPGをOS X MarvericksにはGnuPGが入っていないため、インストール

(前のSnow Leopard/Lionには入ってたような気がしてたけど勘違いかも)

前準備として.bashrcなどにgpg-agentと、TTYの設定をしておきます
(source .bashrcを忘れないように!)

鍵の生成

鍵が無いと始まらないので生成
昔鍵を無くしてREVOKEできなくて後悔したので2年でexpireするように作っておきます

鍵のIDをクリップボードにでもコピりましょう(この場合)5FE1D7EF

公開鍵を鍵サーバーに送る(反映されるまでしばしかかります)

登録されてるか調べるには?

念のためrevoke keyも作っておきましょう
(万が一無くした時本当に残念です)

Git+ GnuPGの設定

ここからやっとgitの設定

これで完了!GPG-signed Commitをしてみましょう
ダイアログが出てきてpassphraseの入力が求められるはず
(最初の.bashrcんとこでgpg-agentを立ち上げているので、一回passphraseを入れればgpg-agentを終了するまで再入力は不要です)

おまちかね、署名を検証してみましょう

gpg: の行が青色になっていれば検証に成功しています

Signed-off-by: も一緒につけて、tag v0.1を付けるならこんな感じでしょうか

tagの検証

Good signatureが表示されてますね!

公開リポジトリの署名を検証する

さて、とりあえず自分のtag/commitは検証できるのですが、このまま他人の公開鍵を入れてないので当然検証できません。
試しにLinusの署名を検証してみましょうw

Linusの公開鍵を探して取り込みます

とりあえず今は彼を信頼しておきましょう
公開鍵に署名します

Linuxのgit repoをcloneします。(本気で重いので注意)

Linux v3.13のtagにLinusの署名があるか確認するには、、?

Good signatureがありますね!Linuxが署名しているとわかります。

これをどう使うか、、Linux Kernelほど巨大であればこのような仕組みは必須ですね。

小規模なプロジェクトでの有効活用はそうだな、、verifyしなきゃdeployが走らないシステムとか、、?ですかね?

ちょっと思いつかないですが、tagを打つ時は署名するのがよさげですね!

参考

A Git Horror Story: Repository Integrity With Signed Commits

Linux カーネルに変更を加えるための Howto

とあるエンジニアの備忘log: パッチを投稿しよう!

辞書で引けない技術英語 2006年08月

コメントを残す

メールアドレスが公開されることはありません。 が付いている欄は必須項目です

このサイトはスパムを低減するために Akismet を使っています。コメントデータの処理方法の詳細はこちらをご覧ください