💼
WindowsのSourceTreeでコミットメッセージの署名
はじめに
WindowsのSourceTreeでコミットメッセージをGPG署名する際の手順のメモになります。
秘密鍵は別の環境で作ったという想定になります。
秘密鍵の準備
Gpg4Winのインストール
インストーラを落としてきてインストールします。
その後に秘密鍵を作成します。その秘密鍵をファイルにエクスポートします。
※ここで実施しているのは公開鍵ではなく秘密鍵のエクスポート
署名を実施する環境
先程の秘密鍵をc:\tmp\などに配置しておきます。
Gpg4Winのインストールを実施します。
ここで注意点でgitコマンドのGit Bashで入っているgpgコマンド(/usr/bin/gpg
)とは別のgpg.exeを用意するためとなります。
次のコマンドを実施
PowerShellでGPGに鍵のインポートの実施
- PowerShellで次のコマンドを実行します。
cd "C:\Program Files (x86)\GnuPG\bin"
.\gpg --import C:\tmp\test_0xXXXXXXXX_SECRET.asc
GIT Bashで実施
git config --global user.signingkey <上記でインポートした鍵のID>
git config --global commit.gpgsign true
git config --global gpg.program "C:\Program Files (x86)\GnuPG\bin\gpg.exe"
まとめ
- SourceTreeの利用するGITはEmbeddingではなく、Systemの環境にインストールしたGITを使うようにします。
- この場合、SourceTreeから利用されるgitはgit bashのgitコマンドになります。
- ただしgit bashでgpgと叩いた場合のGPGコマンドは
C:\Program Files (x86)\GnuPG\bin\gpg.exe
ではないです。 - そのため鍵の取り込みと、gpg.programへの設定は
C:\Program Files (x86)\GnuPG\bin\gpg.exe
を利用&指定するという手順になります。 - GPG鍵を作った環境の場合、GIT Bash上のgpgコマンドでも「GIT Bashで実施」の手順だけで成功します。
以下のコマンドでgpgにインポートされている鍵を確認できます。
cd "C:\Program Files (x86)\GnuPG\bin"
.\gpg --list-secret-keys
逆にいえば、ここで表示されていない鍵をgit config --global user.signingkey
で利用する鍵を登録しても、gitの署名時に失敗します。
また、この鍵はgpgコマンド別の保存状態です。Gpg4Winのgpg.exeとGIT bashの(/usr/bin/gpg
)では別のようです。
Discussion