gcloud source repos cloneが失敗するのを回避する
GCPのGoogle Source Repositoriesからgitリポジトリをcloneできなくなったときの回避法です。
通常、下記のコマンドを用いることで、GCP上でホストされているプライベートリポジトリをGCPの認証情報を利用してcloneすることが出来ます。
gcloud source repos clone REPO_NAME --project=PROJECT_NAME
原因は分かっていませんが、cloneが行われるときに認証用のダイアログが表示されることがあります。
プライベートリポジトリなので入力しなければ、と考えてうっかりこのダイアログでIDとパスワードを入力してしまうと、そのIDが合っているかどうかにかかわらず、
gcloud init
をし直す等をしてもcloneができなくなってしまいます。
>gcloud source repos clone app app WARNING: If your system's credential.helper requests a password, choose cancel. Cloning into '(略)'... fatal: remote error: Invalid authentication credentials. Please generate a new identifier: https://source.developers.google.com/auth/start?scopes=https://www.googleapis.com/auth/cloud-platform ERROR: (gcloud.source.repos.clone) Command '['git', 'clone', '(略)', '(略)', '--config', 'credential.helper=!gcloud.cmd auth git-helper --account=アカウント名 --ignore-unknown $@']' returned non-zero exit status 128
最初に WARNING: If your system's credential.helper requests a password, choose cancel.
と警告が出ていますね。
このエラーをスルーして入力してしまうと、cloneできない問題が発生します。
一度失敗するとエラーで表示されている通り再認証を行っても、 gloud init
を行っても、cloneがずっと失敗する状況になってしまうのがこの問題の厄介な点です。
この問題の解決方法
Gitに登録されている credential.helper
の設定を削除し、再設定します。
※Windowsであれば管理者権限で実行します。
git config --system --unset "credential.helper" git config credential.helper gcloud.cmd
これでcloneができるようになりました。
なぜ?
この設定は、Source Repositoriesをリモートとして追加するときに実行する git config credential.helper gcloud.cmd
によって書き込まれる設定で、
先程表示されたダイアログにID、パスワードを入力してしまうとここの設定がおかしくなってしまうようです。(gcloud.cmdとなっているべきところが、managerなど別のものになってしまう)
なので、この設定を再設定することで、cloneすることができるようになります。