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.gpgsign
を false
の既定値にリセットします。
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.name | GitHub プロファイルに設定されているフル ネームと一致する必要があります |
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 には適用されません。
-
ローカル コンピューターでターミナルを開きます。
-
競合する値を
~/.gitconfig
(Mac/Linux) またはC:\Users\YOUR-USER\.gitconfig
(Windows) から削除するには、git config --global --unset
コマンドを使用します。$ git config --global --unset gpg.program
-
変更を GitHub のドットファイル リポジトリにプッシュします。
-
必要に応じて、ローカル構成を保持するには、ドットファイル リポジトリにプッシュしない Git 構成ファイルで値をもう一度設定します。
たとえば、
--system
フラグを使用して、PATH/etc/gitconfig
のシステム レベル ファイルで構成を設定でます。ここで、PATH
は Git がシステムにインストールされているディレクトリです。$ git config --system gpg.program gpg2
または、ドットファイル リポジトリに install.sh
などの認識されたファイルのインストール スクリプトが含まれている場合は、$CODESPACES
環境変数を使用して、codespace にいない場合にのみ gpg.program
を設定するなどの条件付きロジックを追加できます。 次の例では、codespace にいない場合、-z "$CODESPACES"
が true
を返します。
if [ -z "$CODESPACES" ]; then
git config --global gpg.program gpg2
fi
参考資料
- 「コミット署名の検証について」
- Git の公式ドキュメントの
git config