💼

WindowsのSourceTreeでコミットメッセージの署名

2024/04/26に公開

はじめに

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