🤖

GitHubアカウントの認証情報を2つ保存したときの無限確認を回避する

に公開

根本的に勘違いをしていたので検証して書き直しました。
windows向けの解説なので他OSの人はAIを用意してください。

アカウントを分けたいフォルダを用意する

こんな感じでフォルダを用意

C:/Users/name/folder_A
C:/Users/name/folder_B

パスの階層は関係ないのでもっと深くてもいい。

gitconfigがどこにあるのか特定する

git config --list --show-origin

folder_Aとか、とにかく/User/nameより深い階層でこのコマンドを打つと、gitconfigの設定が全て出てくる。

file:C:/Program Files/Git/etc/gitconfig
file:C:/Users/name/.gitconfig

だいたいこの2か所だと思う。
既にフォルダ分けまでやってここに来た人はfolder_AとBの下にも作ってると思う。

/user/nameの.gitconfigを編集する

[credential]設定の追加

これを追加で書き込む。

[credential]
  credentialStore = wincredman
  helper = manager

どちらもOSによって記述が変わるようなのでAIに聞いてみて。
helperについてはGitのサイトに記述がある。
https://git-scm.com/doc/credential-helpers


windowsはwincredmanを使用。
これはwindowsの資格情報マネージャーに認証情報を保存するという意味。
場所は「コントロールパネル > ユーザーアカウント > 資格情報マネージャー > Windows資格情報」。
すでにgithubの資格情報が入っている場合は消しておく。

フォルダごとの.gitconfigのパスを追加

これを書き込む。

[includeIf "gitdir:C:/Users/name/folder_A"]
  path = C:/Users/name/folder_A.gitconfig-folderA
[includeIf "gitdir:C:/Users/name/folder_B"]
  path = C:/Users/name/folder_B.gitconfig-folderB

.gitconfig-○○の部分は何でもいい。
githubのユーザー名とかにするとわかりやすいと思う。


相対パスにしたい人はこれ。

[includeIf "gitdir:~/folder_A/"]
  path = ~/folder_A/.gitconfig-folderA
[includeIf "gitdir:~/folder_B/"]
  path = ~/folder_B/.gitconfig-folderB

folder_A、B以下に.gitconfig-○○を作成する

忘れずに2か所書く。

[credential]
  namespace = folder_A(識別名なので何でもいい)
[user]
  name = コミッターの名前
  email = コミッターのメアド

[credential]はwincredmanに保存するときの識別名。
保存に成功すると資格情報マネージャーにfolder_A:https://github.comと表示される。

[user]は認証に関係なく、コミットしたときにリポジトリに記載される情報。


作業はこれで以上。

コミッター名をチェックする

このコマンドで、それぞれにコミッターの名前が反映されているか確認する。

git config user.name

反映されていなかったらパスが通っていないので、以下を確認する。

  • C:/Users/name/folder_A以下でコマンドを実行していること
  • [includeIf]のパスが間違っていないこと
  • Program Filesのgitconfigにuserを設定していないこと
  • /user/nameの.gitconfigにuserを設定していないこと
  • 他に競合するgitconfigファイルが存在しないこと

設定の競合を確認するならこの辺のコマンドが見やすい。

git config --show-origin --get-all credential.credentialStore
git config --show-origin --get-all credential.helper
git config --show-origin --get-all user.name

認証できるかチェックする

folder_A、B以下でリポジトリを開くとログインポップアップが表示されるはずなので、そこでログインする。
間違えた場合は資格情報マネージャーから情報を削除するとやり直せる。

ログイン出来たらgit fetchとかしてエラーが出ないかチェック。

片方だけエラーが出る場合もあるので、成功を噛みしめながら交互に2回くらいやってみると確実。

ポップアップが出ない場合

  • 資格情報マネージャーからGiuHubに関係する資格情報を消して再挑戦。
    「コントロールパネル > ユーザーアカウント > 資格情報マネージャー > Windows資格情報」

  • [credential]の設定が競合しているgitconfigがないか、改めて確認する

git config --show-origin --get-all credential.credentialStore
//wincredmanになっている
git config --show-origin --get-all credential.helper
//managerになっている(manager-coreは×)

余談:
GitHubはパスワードでのログインを終了してしまったので、資格情報マネージャーに直接書いてもログインすることができない。

Discussion