Skip to main content

GitHub Codespaces の GPG 検証のトラブルシューティング

この記事では、codespace でのコミットの署名に関連するエラーのトラブルシューティングに関するアドバイスを提供します。

GPG 検証を有効にすると、GitHub Codespaces は、選んだリポジトリから作成した codespace でコミットに自動的に署名します。 詳しくは、「GitHub Codespaces の GPG 検証を管理する」を参照してください。

GPG 検証を有効にすると、関連するリポジトリから作成した新しい codespace で自動的に有効になります。 既存のアクティブな codespace で GPG 検証を有効にするには、codespace を停止して再起動する必要があります。 詳しくは、「codespace の停止と開始」を参照してください。

GitHub Codespaces でコミットに署名できない場合は、次のようなエラーが表示されることがあります。

$ git commit -m 'Initial commit'
error: gpg failed to sign the data
fatal: failed to write commit object

このエラーは次の場合に発生することがあります。

  • GPG 検証を無効にし、既存の codespace で通常の署名なしのコミットを行おうとしている。
  • GPG 検証を有効にしたが、GitHub Codespaces がコミットに署名するために必要な Git 構成を、GitHub Codespaces を Git 構成ファイルを含むドットファイル リポジトリにリンクするなどしてオーバーライドしている。

GPG 検証を無効にした後のエラー

GPG 検証を有効にすると、GitHub Codespaces は、codespace で行ったすべてのコミットに既定で署名します。 これは、commit.gpgsign Git 構成値を true に設定することによって行われます。

GPG 検証を無効にしていて、既存の codespace で作業している場合、この値は引き続き true に設定されます。 つまり、GitHub Codespaces はコミットに署名しようとしますが、GPG 検証設定を無効にしているため、それができません。

codespace で通常の署名なしのコミットを続ける場合は、ターミナルで次のコマンドを入力して、commit.gpgsignfalse の既定値にリセットします。

Shell
git config --unset commit.gpgsign

値が構成から正しく削除されたことを確認するには、「git config --list」と入力します。 commit.gpgsign の値は一覧に表示されないはずです。

構成の競合によって発生するエラー

コミットに自動的に署名するために、GitHub Codespaces は codespace に特定の Git 構成値を設定します。 GitHub Codespaces によって設定された値をオーバーライドすると、コミットに署名できない可能性があります。

GitHub Codespaces を Git 構成ファイルを含むドットファイル リポジトリにリンクしている場合、これらの値を誤ってオーバーライドしている可能性があります。 GitHub Codespaces でドットファイルを使用する方法について詳しくは、「アカウントの GitHub Codespaces のカスタマイズ」を参照してください。

構成の競合の確認

GPG でコミットに署名するために、GitHub Codespaces はシステム レベルで次の Git 構成値を自動的に設定します。

構成設定必須値
user.nameGitHub プロファイルに設定されているフル ネームと一致する必要があります
credential.helper/.codespaces/bin/gitcredential_github.sh に設定されている必要があります。
gpg.program/.codespaces/bin/gh-gpgsign に設定されている必要があります。

これらの値が codespace で正しく設定されていることを確認するには、git config --list --show-origin コマンドを使用します。 GitHub Codespaces はシステム レベルでこの構成を設定するため、必要な構成設定は /usr/local/etc/gitconfig から行う必要があります。

$ git config --list --show-origin
file:/usr/local/etc/gitconfig   credential.helper=/.codespaces/bin/gitcredential_github.sh
file:/usr/local/etc/gitconfig   user.name=Mona Lisa
file:/usr/local/etc/gitconfig   gpg.program=/.codespaces/bin/gh-gpgsign

上記の値に加えて、codespace で使用されているドットファイルに次のいずれかの値が含まれていると、エラーが発生する可能性があります。

  • user.signingkey の Git 構成値
  • commit.gpgsign の Git 構成値
  • 手動で設定された GITHUB_TOKEN

構成の競合の削除

GitHub Codespaces の自動 GPG 検証を有効にしたままにするには、codespace で使用されているドットファイルから競合する構成を削除する必要があります。

たとえば、ローカル コンピューター上のグローバル .gitconfig ファイルに gpg.program の値が含まれており、このファイルを GitHub Codespaces にリンクされているドットファイル リポジトリにプッシュした場合、代わりにこのファイルから gpg.program を削除し、ローカル コンピューターのシステム レベルで設定することができます。

メモ: ドットファイル リポジトリに対する変更は、作成した新しい codespace には適用されますが、既存の codespace には適用されません。

  1. ローカル コンピューターでターミナルを開きます。

  2. 競合する値を ~/.gitconfig (Mac/Linux) または C:\Users\YOUR-USER\.gitconfig (Windows) から削除するには、git config --global --unset コマンドを使用します。

    $ git config --global --unset gpg.program
    
  3. 変更を GitHub のドットファイル リポジトリにプッシュします。

  4. 必要に応じて、ローカル構成を保持するには、ドットファイル リポジトリにプッシュしない Git 構成ファイルで値をもう一度設定します。

    たとえば、--system フラグを使用して、PATH/etc/gitconfig のシステム レベル ファイルで構成を設定でます。ここで、PATH は Git がシステムにインストールされているディレクトリです。

    $ git config --system gpg.program gpg2
    

または、ドットファイル リポジトリに install.sh などの認識されたファイルのインストール スクリプトが含まれている場合は、$CODESPACES 環境変数を使用して、codespace にいない場合にのみ gpg.program を設定するなどの条件付きロジックを追加できます。 次の例では、codespace にいない場合、-z "$CODESPACES"true を返します。

Shell
if [ -z "$CODESPACES" ]; then
  git config --global gpg.program gpg2
fi

参考資料