VSCodeでGitをGUIで利用する際に,git: Permission denied (publickey)と出てしまう事がありました.この解決を色々試してみたので備忘録的に記します.
原因
まず,このエラーが出る原因を探るため,エラーの発生状況を確かめました.その結果発生するのは主に,
の二つであることがわかりました.このことから,おそらくremoteとのアクセスに失敗していることがわかります.logを見てみても,
fatal: Could not read from remote repository.
と出ているため,これは正しいでしょう.
したがってremoteとのアクセス方法を変更することで,この問題に対処します.
解決策
まず,remoteとのアクセスに使用するプロトコルをgitからhttpsに変更します.
これは
Path/to/repository/.git/config
の[remote “origin”]にあるurlを変更することで対応します.
おそらくurlはgit@…となっているので,これをhttpsから始まるurlに変更します.
変更後のurlは利用するリポジトリ(今回はgithub)から取得します.
本来ならば以上の処理を行うだけで問題は解決できると思うのですが,本アカウントではgithubに二段階認証を利用しているため,若干手間が必要です.
予め,githubのSettingsからPersonal Access Tokenを取得しておきます.なおPermissionはrepoのみあれば十分です.
このTokenをgithubのログインに使用します.
VSCode上でgitアクセスを行う場合,本環境では2回ログイン処理が必要でした.
具体的には,最初にGUI上でログインする処理と,その後にコマンドパレット上でログインする処理とです.
最初のログインでは通常と同様にgithubに登録したメールアドレスとパスワードを入力します.
次のログインではメールアドレスとTokenを入力します.
この処理を行うことでVSCode上でGitをGUIで利用できるでしょう.
問題点
現在の設定ではGitのpull, pushごとにTokenの入力が必要となってしまいます.
おそらく設定でどうにかなるので,今後も調査していきたいです.
追記
Tokenの入力の省略方法がわかったので追記します.
現在のconfig中のurlは
url = https://github.com/{accountName}/{repositoryName}
となっていますが,これを
url = https://{accountName}:{accessToken}@github.com/{accountName}/{repositoryName}
という風に変更することでTokenの入力を省略できました.