メインコンテンツまでスキップ

Git Credential Manager

Git for Windows を使った場合の資格情報の保存

git pull などリモートとの接続をすると初回接続時には以下のように CredentialHelperSelector が表示されます。

alt text

manager を選択すると GitHub への接続ウィンドウが開きます。
ここで Sign in with your browser ボタンをクリックします。

alt text

すると、ブラウザが開きます。
もしブラウザで GitHub にログインしていなければ以下のようにログイン画面が表示されます。

alt text

ログインが完了するか、すでにログイン済であればブラウザは真っ暗な画面になります。

場合によっては以下のようにもう一度 CredentialHelperSelector が表示されるかもしれません。もう一度 manager を選択しましょう。

alt text

すると、コンソールの方では git pull が成功しているはずです。

これ以降は、GitHub の方でアカウント情報を変更したり、認証の期間が切れるまではログインを求められることはありません。

では、どうしてログインが求められなくなるのでしょうか

資格情報として保存されている

Git に GitHub の認証情報をキャッシュする - GitHub Docs

上記リンクは GitHub から出ている認証情報、つまりログインした情報を保存する方法についてのガイドです。
そこで、Git Credential Manager(GCM) を使うというガイドが示されています。

実は最初に行った CredentialHelperSelector から GitHub へのログインという一連の操作は、内部では Git Credential Manager を利用しています。

保存されている資格情報を確認する

上記のリンクにある通り Windows の [コントロール パネル] の [ユーザー アカウント] > [資格情報マネージャー] に資格情報、つまりパスワードやアクセストークン情報が保存されています。

alt text

alt text

alt text

エントリを開くと以下の画像のように「編集」と「削除」が可能です。

alt text

この認証が Git Credential Manager から自動的に読み込まれるため、GitHub へのサインインが不要になっています。

Visual Studio の場合

Visual Studio の Git 機能を使っている場合も同様に Git Credential Manager が利用されています。
ソース管理の設定から「資格情報ヘルパー」の確認ができますが、そこに GCM が選択されていれば利用されているということです。

alt text

GitHub への直接ログインを促される場合

設定によっては git pull などのリモート操作の際に以下のような入力を促される場合があります。

alt text

もちろん、これでログインすることも可能ですが自分でアクセストークンを取得するなど手間がかかります。

どうして Git Credential Manager が利用されないかの確認をすべきです。

確認

git config --global credential.helper
git config --global credential.helperselector.selected

いずれかの結果に helper-selector または manager が入っていない可能性があります。

gitconfig への設定

gitconfig に以下の設定をします。もしすでに [credential] セクションの設定があればそれは消して問題ありません。

%USERPROFILE%.gitconfig
[credential]
helper = helper-selector

そこでもう一度 git pull 等をすると以下が表示されます。

alt text

そうすると 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 のインストールフォルダにある gitconfighelper = helper-selector の設定があればそちらが優先されます。

CredentialHelperSelector のダイアログが頻繁に出る場合の対処

いくつかやり方はありますが、一つの方法を示します。

Git for Windows の gitconfig の場所を以下のコマンドで調査します。インストールフォルダが分かれば直接開いてもらっても大丈夫です。

git config --show-origin --get-all credential.helper

その場所にある gitconfig を開き、credential に関する設定があることを確認します。 続いて %USERPROFILE%\.gitconfigcredential の設定も確認します。

両方に存在する、またはどちらかに無いことが確認できたら、両方のファイルの credential の設定を以下のみにします。

[credential]
helper = manager

どちらかのファイルだけを上記にし、片方は credential の設定を削除する方法でも良いのですが、今回は一例として両方を残すようにしています。(場合によっては %USERPROFILE%\.gitconfig は他の Git を使うアプリでも参照されるため)

Visual Studio の Git 設定

Visual Studio はマシンに Git for Windows がインストールされていなくても Git を利用することができます。
つまり、Visual Studio 自体が Git を持っているということです。

以下のように Git の設定情報を見ると MinGit というものが使われていることが分かります。

alt text

では、その 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 です。場所と内容は以下です。

C:\Program Files\Microsoft Visual Studio\2022\Community\Common7\IDE\CommonExtensions\Microsoft\TeamFoundation\Team Explorer\Git\etc

[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」