nFact

n!

gcloud source repos cloneが失敗するのを回避する

GCPGoogle 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することができるようになります。