もやし日誌

日記のようなもの

Sourcetree for WindowsでコミットにGPGで署名する

f:id:kazuki09:20180307014549p:plain

上記画像のようにgithubでは署名してあるコミットにはVerifiedの印が付く。

署名したい...といっても、Sourcetree for Windowsは署名に対応してない(Mac版は対応してる模様)ので強引に対応させた時のメモ。

鍵は既に生成済みという前提で話を進めます。

Gpg4winを導入する

既に導入済みなら飛ばしてください。

Gpg4win - Download Gpg4win

f:id:kazuki09:20180307015409j:plain

KleopatraというGUIツールが付いてくるのでありがたく使わせてもらって、ここでLinux環境で使っていた鍵をインポートした。

一応パスが通ってるかの確認も込めて、Powershellからgpg --list-secret-keysを実行してみる。

PS C:\Users\izumin> gpg --list-secret-keys
C:/Users/izumin/AppData/Roaming/gnupg/pubring.kbx
-------------------------------------------------
sec   rsa4096 2018-03-06 [SC]
      28CCF1B13BB7557AA13039949B215618569CB439
uid           [  究極  ] Izumi Ohishi <ohishiizumi@example.com>
ssb   rsa4096 2018-03-06 [E]

大丈夫そうですね。

Git for Windowsの設定を弄る

Powershellから以下のコマンドを実行。

> git config --global user.signingkey 28CCF1B13BB7557AA13039949B215618569CB439
> git config --global commit.gpgsign true
> git config --global gpg.program $((gcm gpg).Definition)

qiita.com

Powershellでは(gcm gpg).Definitionと実行してあげることで*nix環境のwhichコマンドと同じ事ができる模様。

※Sourcetree側で対応してないならデフォルトで署名つけるようにすれば良いのでは?という強引な解決策なのでSourcetreeのGUIから今回だけは署名したくないみたいなことは出来ないです。

※Git for Windows付属のGnuPGはちょっとおバカなので(あるはずもない/dev/ttyを参照したりとか)使わないようにします。

※Sourcetree内蔵のgitで同じことが出来るかどうかは未確認です。

ちなみにこの設定により、以後デフォルトでコミットにここで設定した鍵で署名が付くようになるので注意。

あとは普通に今まで通りのようにcommitするだけ

f:id:kazuki09:20180307031759j:plain

コミット処理中に鍵のパスワードを求めるダイアログが出てくるので、入力してOKを押せば大丈夫です。

あとがき

いい加減Windows版も対応してくれ....(悲願)

Setup GPG to sign commits within SourceTree - Atlassian Documentation

一応公式に設定方法のドキュメントはあるが、これはmacOS版だけなのでWindows版では同じことは出来ない模様。(今のところは)

Solved: Does Sourcetree support git commit --gpg-sign?