Skip to main content

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

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

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

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

GitHub Codespaces でコミットに署名できない場合は、コマンド ラインまたは Visual Studio Code のポップアップ ウィンドウにエラー メッセージ gpg failed to sign the data が表示されることがあります。

この記事の以下のセクションでは、このエラーの一般的な原因に関するトラブルシューティングのアドバイスを提供します。

  • GitHub Codespaces の設定で以前に GPG 検証を有効にしており、最近 GPG 検証を無効にしたか、信頼するリポジトリの一覧からリポジトリを削除した場合は、Git が引き続きコミットに署名しようとしている可能性があります。 詳しくは、「GPG 検証を無効にした後のエラー」を参照してください。
  • codespace に対して GPG 検証が有効になっている場合は、コミットの署名に必要な Git 構成をオーバーライドしている可能性があります。 詳しくは、「競合する Git 構成によって発生するエラー」を参照してください。
  • codespace に対して GPG 検証が無効になっており、VS Code の [ソース管理] ビューからコミットしようとしたときにエラーが発生した場合は、VS Code の設定が原因である可能性があります。 詳しくは、「VS Code の [ソース管理] ビューのエラー」を参照してください。

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 の値は一覧に表示されないはずです。

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

コミットに自動的に署名するために、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

VS Code の [ソース管理] ビューのエラー

GitHub Codespaces の設定で GPG 検証が無効になっている場合、または codespace を作成したリポジトリが信頼するリポジトリの一覧に含まれていない場合、Git によってコミットへの署名が試みられることはありません。 VS Code の [ソース管理] ビューからコミットしようとしたときに署名エラーが発生する場合は、codespace で VS Code の設定をチェックする必要があります。

  1. ウィンドウの左下隅にある [] を選択し、 [設定] をクリックします。

    VS Code Web クライアントのセクションのスクリーンショット。 メニューの歯車アイコンと [設定] オプションの両方がオレンジ色の枠線で強調表示されています。

  2. [ユーザー] タブの検索バーで、「gpg」を検索します。

  3. [GPG または X.509 によるコミットの署名を有効にする] 設定がオフになっていることを確認します。

    [ユーザー] 設定タブのスクリーンショット。オフになった [GPG または X.509 によるコミットの署名を有効にする] というラベルが付いたチェックボックスがオレンジ色の枠線で強調表示されています。

この設定が有効になっている場合は、チェックボックスをオフにして VS Code がコミットを署名しないようにするか、作業するリポジトリに対して GPG 検証を有効にして、コミットを正常に署名できるようにする必要があります。

VS Code の設定を変更する場合に、変更内容を作成した他の codespace と共有する場合は、Settings Sync が有効になっていることを確認する必要があります。 信頼するリポジトリから作成された codespace でのみ Settings Sync をオンにする必要があります。 詳しくは、「アカウントの GitHub Codespaces をパーソナライズする」を参照してください。

参考資料