ネタバレ
- Windows側の資格情報マネージャーでGitHubの資格情報を消してWSLを再起動する
以下,詳しい経緯と解説です.
Gitの失踪
ある日,VSCodeでWSL上のレポジトリ(GitHubで管理)を開いてgit fetch
を実行すると,まさかの
$ git fetch
git: command not found
!!?
消した覚えないんだけど……
もしかして Windows 側で Visual Studio (VSCodeじゃなくて) のインストール作業をしたせい?
それで,とりあえずWSL上でGitを再インストールしたのはいいものの,今度はこんなエラーが.
$ git fetch
Missing or invalid credentials.
Error: connect ENOENT /run/user/1000/vscode-git-xxxxxxxxxx.sock
at PipeConnectWrap.afterConnect [as oncomplete] (node:net:1157:16) {
errno: -2,
code: 'ENOENT',
syscall: 'connect',
address: '/run/user/1000/vscode-git-xxxxxxxxxx.sock'
}
Missing or invalid credentials.
Error: connect ENOENT /run/user/1000/vscode-git-xxxxxxxxxx.sock
at PipeConnectWrap.afterConnect [as oncomplete] (node:net:1157:16) {
errno: -2,
code: 'ENOENT',
syscall: 'connect',
address: '/run/user/1000/vscode-git-xxxxxxxxxx.sock'
}
remote: Repository not found.
fatal: Authentication failed for 'https://github.com/******/'
😅
原因調査
- まずは落ち着きましょう。
-
type git
でgit
の在り処を確かめても,git is /usr/bin/git
(Windows上にあるGitを参照しているわけではない)と出るので,WSL内の問題に思えました. - しかし,Windows上のレポジトリをVSCodeで開き,エラーが出るかどうか確かめましょう.
レポジトリがない場合は新たにクローンするのでも良いです.(認証が必要なプライベートレポジトリの方がいいですね)
やってみたところ,エラー内容は詳細に出ませんが,クローンできませんでした.
つまり,(WSL関係なく) Windows側の資格情報に問題があったようです.
WSL上のGitの資格情報は,Windows側で保持しているということが分かりました.
対処法: Windows上の資格情報を消す
スタートメニューから「資格情報マネージャー」を開き,「Windows 資格情報」をクリックします.
「汎用資格情報」に一覧がざっと表示されますので,github に関係しそうなものを削除してしまいましょう.
削除後に追加されているのを確かめた感じ,以下の2つが当該の資格情報のようです.
vscodevscode.github-authentication/github.auth
git:https://github.com
削除後,再びWindows上でクローンを行ったところ,改めて GitHub へのサインインを求められますが,無事にクローンできました!
WSL だとまだ動かない!?
そして次にWSL上のレポジトリでgit fetch
を試してみるわけですが,同様に動きません.
(そのおかげで先ほどのエラーメッセージ内容を取得できたわけですが…)
「再起動は全てを解決する」という名言のもと,WSLを再起動します.
全てのWSL関連のものを閉じて少し待つのでもよいですが,確実に再起動するには,Powershell上で以下のコマンドを実行します.
(強制的にシャットダウンされてしまうので注意.)
wsl --shutdown
その後,再びgit fetch
を試してみたところ,エラーなく正常にフェッチできました.
めでたしめでたし.
まとめ
- Gitの認証でエラーが出た際は,まずWSL固有の問題か,Windowsでも再現する問題かで切り分ける.
- WSLにおけるGitの資格情報は,Windows側で管理している.
- Windowsの資格情報マネージャーでGitHubの資格情報を消去後,WSLを再起動する.
おしまい.