先に結論を述べるとgit config --global credential.https://(new hostname).provider gitlab
を実行して解決した。
当初の原因の考察では、サーバー側に設定漏れがあるのではないかと考えていた。
しかし実際は、Gitクライアント側の設定追加が必要だった。
事象
オンプレミス上でホスティングしているGitLabを、別の物理サーバーへ移行した。
クライアント側では、リモートのURLを新サーバーに変更する作業のみ行った。
この状態でリモートリポジトリに接続可能だったため、移行は成功したと思いきや
プルやプッシュの際、サーバーに接続するまでに数秒かかり(遅くなり)、下記の警告が出力されるようになった。
warning: auto-detection of host provider took too long (>2000ms)
warning: see https://aka.ms/gcm/autodetect for more information.
warning: auto-detection of host provider took too long (>2000ms)
warning: see https://aka.ms/gcm/autodetect for more information.
調査
前出のwarningで見ろと言われているページを見に行くと
GCM(git credencial manager)のドキュメントに行き着いた。
GCMとは、gitの資格情報を管理するツールである。
GCMが働くことで、Gitクライアントからサーバへアクセス(pull,pushなど)する時に
username・password・MFAなどの認証を省略できている。
ドキュメントにはGCMのホストプロバイダを自動検出する機能について書かれていた。
ページを読み進めると最後のほうに、問題が起きている場合は
git config --global
で手動設定するように書かれていた。
ページをひととおり読んで、いまのgit config
が間違っていそうなことが分かった。
現在の設定がどうなっているのかを確認してみた。
$ git config --global --list
...
credential.https://(old hostname).provider=generic
...
現在のconfigを確認したところ、新しいホストに対するprovider
の設定が無かった。
ドキュメントにも書いてあったとおりcredential.https://(new hostname).provider
を設定すればよさそうだと判断した。
解決方法
git config
で設定する値はgeneric
でもよさそうだが、ドキュメントに倣ってgitlab
を指定した。
$ git config --global credential.https://(new hostname).provider gitlab
この状態でプルを試して、冒頭のwarningが出現しないこと、それに伴いプルに時間がかからなくなったことを確認し、問題解決した。
また、調査中にGCMのdocs内にGitLab supportのページを発見した。
このページに載っているコマンドで、移行前のホストのcredencialに関する設定を削除した。
$ git config --global --unset-all credential.https://(old hostname)
このページでは「Using on another instance」として別のインスタンスを使う時の手順が丁寧に説明されていた。
移行の際は、最初からこのページを参照することをお勧めする。