Git Credential Manager
Git for Windows を使った場合の資格情報の保存
git pull
などリモートとの接続をすると初回接続時には以下のように CredentialHelperSelector
が表示されます。
manager
を選択すると GitHub への接続ウィンドウが開きます。
ここで Sign in with your browser
ボタンをクリックします。
すると、ブラウザが開きます。
もしブラウザで GitHub にログインしていなければ以下のようにログイン画面が表示されます。
ログインが完了するか、すでにログイン済であればブラウザは真っ暗な画面になります。
場合によっては以下のようにもう一度 CredentialHelperSelector が表示されるかもしれません。もう一度 manager
を選択しましょう。
すると、コンソールの方では git pull
が成功しているはずです。
これ以降は、GitHub の方でアカウント情報を変更したり、認証の期間が切れるまではログインを求められることはありません。
では、どうしてログインが求められなくなるのでしょうか?
資格情報として保存されている
Git に GitHub の認証情報をキャッシュする - GitHub Docs
上記リンクは GitHub から出ている認証情報、つまりログインした情報を保存する方法についてのガイドです。
そこで、Git Credential Manager(GCM)
を使うというガイドが示されています。
実は最初に行った CredentialHelperSelector
から GitHub へのログインという一連の操作は、内部では Git Credential Manager
を利用しています。
保存されている資格情報を確認する
上記のリンクにある通り Windows の [コントロール パネル] の [ユーザー アカウント] > [資格情報マネージャー]
に資格情報、つまりパスワードやアクセストークン情報が保存されています。
エントリを開くと以下の画像のように「編集」と「削除」が可能です。
この認証が Git Credential Manager
から自動的に読み込まれるため、GitHub へのサインインが不要になっています。
Visual Studio の場合
Visual Studio の Git 機能を使っている場合も同様に Git Credential Manager
が利用されています。
ソース管理の設定から「資格情報ヘルパー」の確認ができますが、そこに GCM
が選択されていれば利用されているということです。
GitHub への直接ログインを促される場合
設定によっては git pull
などのリモート操作の際に以下のような入力を促される場合があります。
もちろん、これでログインすることも可能ですが自分でアクセストークンを取得するなど手間がかかります。
どうして Git Credential Manager
が利用されないかの確認をすべきです。
確認
❯ git config --global credential.helper
❯ git config --global credential.helperselector.selected
いずれかの結果に helper-selector
または manager
が入っていない可能性があります。
gitconfig への設定
gitconfig
に以下の設定をします。もしすでに [credential]
セクションの設定があればそれは消して問題ありません。
[credential]
helper = helper-selector
そこでもう一度 git pull
等をすると以下が表示されます。
そうすると gitconfig
は以下のように増えています。CredentialHelperSelector
の結果が manager
になり、今後は Git Credential Manager
が使われるようになったということですね。
[credential]
helper = helper-selector
[credential "helperselector"]
selected = manager
ちなみにこれは、以下のように 1 行にまとまった設定にすることも可能です。
[credential]
helper = manager
ただし、Git for Windows のグローバルの gitconfig 設定で helper-selector
の設定が残っていると、そちらが優先して参照されるので、いずれにしろ helper-selector が出てしまうかもしれません。
例えば %USERPROFILE%\.gitconfig
には helper = manager
が直接書かれていても、Git for Windows のインストールフォルダにある gitconfig
に helper = helper-selector
の設定があればそちらが優先されます。
CredentialHelperSelector のダイアログが頻繁に出る場合の対処
いくつかやり方はありますが、一つの方法を示します。
Git for Windows の gitconfig
の場所を以下のコマンドで調査します。インストールフォルダが分かれば直接開いてもらっても大丈夫です。
❯ git config --show-origin --get-all credential.helper
その場所にある gitconfig
を開き、credential
に関する設定があることを確認します。
続いて %USERPROFILE%\.gitconfig
の credential
の設定も確認します。
両方に存在する、またはどちらかに無いことが確認できたら、両方のファイルの credential
の設定を以下のみにします。
[credential]
helper = manager
どちらかのファイルだけを上記にし、片方は credential
の設定を削除する方法でも良いのですが、今回は一例として両方を残すようにしています。(場合によっては %USERPROFILE%\.gitconfig
は他の Git を使うアプリでも参照されるため)
Visual Studio の Git 設定
Visual Studio はマシンに Git for Windows がインストールされていなくても Git を利用することができます。
つまり、Visual Studio 自体が Git を持っているということです。
以下のように Git の設定情報を見ると MinGit
というものが使われていることが分かります。
では、その Git はどこにあるのでしょうか?
git.exe
Visual Studio のインストールフォルダによりますが、C:\Program Files
にインストールしている場合は以下にあります。
C:\Program Files\Microsoft Visual Studio\2022\Community\Common7\IDE\CommonExtensions\Microsoft\TeamFoundation\Team Explorer\Git\mingw64\bin\git.exe
この git は PATH
には入っていないため、このフォルダのものを直接使うしかありません。(使う必要はまったくありませんが)
gitconfig
続いて gitconfig
です。場所と内容は以下です。
[core]
symlinks = false
autocrlf = true
[color]
interactive = true
ui = auto
[pack]
packSizeLimit = 2g
[help]
format = html
[http]
sslCAinfo = %(prefix)/etc/ssl/certs/ca-bundle.crt
[diff "astextplain"]
textconv = astextplain
[rebase]
autosquash = true
[filter "lfs"]
clean = git-lfs clean -- %f
smudge = git-lfs smudge -- %f
process = git-lfs filter-process
required = true
[credential]
helper = manager
[credential "https://dev.azure.com"]
usehttppath = true
[include]
; include Git for Windows' system config in order
; to inherit settings like `core.autocrlf`
path = C:/Program Files (x86)/Git/etc/gitconfig
path = C:/Program Files/Git/etc/gitconfig
上記を見て分かる通り、helper = manager
となっており、Visual Studio のオプション画面で見た GCM
の設定通り Git Credential Manager
が選択されていることが分かります。
- 検索ワード
- 「Git CredentialHelperSelector」
- 「Git 認証情報 管理」
- 「visual studio gitconfig」