Skip to content
New issue

Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.

Already on GitHub? Sign in to your account

Select an account prompt showing duplicate "Personal Access Token" options when Visual Studio is also signed-in with GitHub #1325

Closed
FBoucher opened this issue Jul 11, 2023 · 46 comments · Fixed by #1328
Assignees
Labels
bug A bug in Git Credential Manager host:github Specific to the GitHub host provider platform:windows Specific to the Windows platform

Comments

@FBoucher
Copy link

Feature description

I have multiple Git accounts.
When the popup Select Account shows up... I have the choice between "Personal Access token" and "Personal Access token".
There is no way to make any distinctions.

See screenshot

image

@FBoucher FBoucher added the enhancement New feature or request label Jul 11, 2023
@KirillOsenkov
Copy link

Same issue. Looks like I got updated to 2.2.1 released on July 5:
https://github.com/git-ecosystem/git-credential-manager/releases/tag/v2.2.1

Could it have regressed something?

@KirillOsenkov
Copy link

@mjcheetham could this be a regression? This dialog started showing up today. I work for Microsoft and have Microsoft and other orgs access if that matters. This dialog disrupts the workflow and the UX is poor (which PAT is which?). How do I view more info about these PATs and perhaps delete one of them?

@mjcheetham mjcheetham self-assigned this Jul 11, 2023
@mjcheetham
Copy link
Collaborator

Hi @KirillOsenkov, I assume you're on Windows here? Can you please run the following command to see what these credentials are:

cmdkey /list:git*

Example output:

Currently stored credentials for git*:

    Target: git:https://github.com/
    Type: Generic
    User: mattche_microsoft
    Local machine persistence

    Target: git:https://bitbucket.org/
    Type: Generic
    User: mjcheetham
    Local machine persistence

    Target: git:https://bitbucket.org/refresh_token
    Type: Generic
    User: mjcheetham
    Local machine persistence

    Target: git:https://gitlab.com/
    Type: Generic
    User: oauth2
    Local machine persistence

    Target: git:https://oauth-refresh-token.gitlab.com/
    Type: Generic
    User: oauth2
    Local machine persistence

    Target: git:https://mjcheetham@github.com/
    Type: Generic
    User: mjcheetham
    Local machine persistence

Are you using Visual Studio? Did you first clone/interact with a GitHub repository from inside of Visual Studio or from the terminal (since the OS was first installed)?

@MSACATS
Copy link

MSACATS commented Jul 11, 2023

I'm having this issue as well without multiple access tokens

image

I have the github plugin installed in VS; I'm guessing this is what's up (excerpted from cmdkey). It started happening this week.

Target: GitHub for Visual Studio - https://github.com/
Type: Generic
User: MSACATS
Local machine persistence

Target: git:https://github.com
Type: Generic
User: MSACATS
Local machine persistence

@mjcheetham
Copy link
Collaborator

Hello all! Thanks for your patience with this problem. We have now identified the cause of the issue, and have a fix.

The recently added support for multiple accounts in GCM is erroneously detecting duplicate credentials when Visual Studio has a signed-in GitHub account. Selecting either of the options listed "Personal Access Token" will allow the Git operation you are running to proceed, but we appreciate this is a frustrating interruption.

We are working on getting out a new release of GCM, and subsequently Git for Windows (that bundles GCM) with a fix to this issue.

In the meantime, there are a few workarounds:

  1. Downgrade your Git for Windows installation to 2.41.0.windows.1.

  2. Sign out/remove the GitHub account in Visual Studio, and delete existing credentials from the Windows credential manager. Specifically you'll need to delete the https://github.com and GitHub for Visual Studio - https://github.com entries but not the git:https://github.com entry:

image

@mjcheetham mjcheetham added bug A bug in Git Credential Manager platform:windows Specific to the Windows platform host:github Specific to the GitHub host provider and removed enhancement New feature or request labels Jul 11, 2023
@mjcheetham mjcheetham pinned this issue Jul 11, 2023
@mjcheetham mjcheetham changed the title The Select Account prompt is not useful when using multiple Access Tokens Select an account prompt showing duplicate "Personal Access Token" options when Visual Studio is also signed-in with GitHub Jul 11, 2023
@FBoucher
Copy link
Author

Great! That was quick looking forward to see to update :)

mjcheetham added a commit that referenced this issue Jul 12, 2023
…redential Manager (#1328)

GCM by default creates entries in the Windows Credential Manager on
Windows, and prefixes the 'target name' of the entry with "git:". This
'namespace' prefix is configurable, but is not often changed in practice
outside of tests.

Visual Studio, when adding GitHub accounts (either natively or by the
older GitHub extension for VS), it creates three credential entries:

1. GitHub for Visual Studio - https://github.com
2. git:https://github.com
3. https://github.com

Entry 1 is used by VS for it's own purposes. Entry 2 is created for the
benefit for GCM, so that we are 'primed'. It is unknown what entry 3 is
for at this time.

There is an error in our existing logic for enumerating credentials that
is also matching entry 3 as well as the expected entry 2.

Modify and fix the matching logic to ensure that the namespace prefix
matches, rather than just stripping it and matching (even if it doesn't
exist!).

Fixes #1325

---

**Bug repro instructions:**

1. Open Visual Studio
2. File > Account Settings
3. Add a GitHub account
4. Open a terminal (inside or outside of VS) and attempt to
clone/fetch/push to or from a private GitHub repository.

At this point a window should appear asking you to select between two
"Personal Access Token" accounts.

After installing [the bits from this PR build (artifacts >
win-x86)](https://github.com/git-ecosystem/git-credential-manager/pull/1328/checks),
attempting step 4 should **no longer** result in a prompt to select
between two "Personal Access Token" accounts.
@mjcheetham
Copy link
Collaborator

We've now merged in the fix to main, and will start working on a hotfix release that includes this imminently.

I will update this issue once the release is complete.

@mjcheetham mjcheetham reopened this Jul 12, 2023
mjcheetham added a commit that referenced this issue Jul 12, 2023
**Changes since 2.2.1:**

- Fix an issue where duplicate "Personal Access Token" GitHub account
options are shown when Visual Studio has a GitHub account signed-in
(#1325 #1328)
- Fix an issue with Azure DevOps Server (TFS) and Windows Integrated
Authentication (#1331 #1332)
- Fix an issue with OAuth redirects GitHub Enterprise Server (#1329
#1330)
- Correctly handle non-ASCII username/passwords with the WPF UI helpers
(#1287 #1326)
@mjcheetham
Copy link
Collaborator

Hello all!

Git for Windows 2.41.0(3) has just been released in the last few minutes:

https://github.com/git-for-windows/git/releases/tag/v2.41.0.windows.3

This release includes GCM 2.2.2 that fixes this issue.

@tobiasweibel
Copy link

Hi all
I still get that dialog. I'm using mainly an enterprise github instance and accessing it from git CLI and Jetbrians products.
version: git version 2.41.0.windows.3
Anybody else can still reproduce it?

@MacKopes1
Copy link

Still getting the issue as well with git version 2.41.0.windows.3 whenever I fetch with vscode.

@mrleemon
Copy link

Updated to git version 2.41.0.windows.3 and I'm still getting the duplicated account when using VSCode to sync changes with GitHub repos.

@ldennington ldennington unpinned this issue Jul 17, 2023
@ldennington ldennington pinned this issue Jul 17, 2023
@mrleemon
Copy link

@mjcheetham I'm no longer seeing the account selection dialog. Thanks!

@tobiasweibel
Copy link

How can I delete the bad one?

For your situation you can run the following to remove the wincred line:

git config --global --unset-all credential.helper

Additionally, I had to open the Windows Credential Manager and delete the GitHub credential. When calling git fetch I had to re-enter the personal access token. But now I'm all set.

@beard7
Copy link

beard7 commented Jul 19, 2023

Additionally, I had to open the Windows Credential Manager and delete the GitHub credential. When calling git fetch I had to re-enter the personal access token. But now I'm all set.

Yep. That's done the trick. Thanks

@aidtopia
Copy link

I'm still confused about how to resolve this. After reading through this thread a few times, here's what I've tried:

  1. I've taken git updates and verified that my git version is 2.41.0.windows.3.

  2. I have signed out of Visual Studio. I've never intentionally used git or GitHub through the IDE, but somehow Visual Studio does track my git status.

  3. I have issued git config --global --unset-all credential.helper. Now git config --show-origin --get-all credential.helper lists only file:C:/Program Files/Git/etc/gitconfig manager.

I've seen at least one comment saying I need to "delete the GitHub" credential as if there's only one. In Windows Credential Manager (which I didn't know was a thing until tonight), I see two possibly relevant entries:

  • git:https://github.com
  • git:https://aidtopia@github.com

Am I supposed to delete one or both of those?

The screenshot upthread seems to suggest I should keep those and instead delete GitHub for Visual Studio - https://github.com and https://github.com/ (w/o the git: prefix and with the trailing slash), but I don't have either of those.

I currently have only one GitHub account, and it's the only one I've ever used from this machine. So it's not clear to me why I even have two credentials for GitHub.

I vaguely recall having trouble setting up a personal access token way back when, so I don't relish having to figure out that process again.

What's my next step?

@RobCannon
Copy link

RobCannon commented Jul 31, 2023

I am using WSL and I had to run this command from the WSL prompt to keep the dialog from popping up:

git config --global credential.helper "/mnt/c/Program\ Files/Git/etc/gitconfig.exe manager"

This is NOT what is documented in WSL docs here:
https://github.com/git-ecosystem/git-credential-manager/blob/main/docs/wsl.md

Never mind, that did not work.

I am still getting the popups in WSL (with Visual Studio Code).

@ldennington
Copy link
Contributor

@RobCannon - can you please open a WSL terminal, run the below command, and share the output here?

git config --list --show-origin

@mjcheetham
Copy link
Collaborator

@aidtopia

I currently have only one GitHub account, and it's the only one I've ever used from this machine. So it's not clear to me why I even have two credentials for GitHub.

The likely reason you are seeing these two entries is because the git:https://github.com entry was probably made by Visual Studio, with the user name as "Personal Access Token", and GCM didn't want to overwrite this credential with its own (with username "aidtopia") in case it was a secondary account.

The easiest thing to do here for you is to delete both git: entries and then re-authenticate from the command-line by doing a git fetch in an existing repos for example.

@aidtopia
Copy link

@mjcheetham

tl;dr: It seems to have worked. Thanks!

I'm still rather confused, though.

probably made by Visual Studio, with the user name as "Personal Access Token"

Neither of the user names for me were "Personal Access Token." In my case, the "Select an Account" dialog kept asking me to choose between "aidtopia" and "aidtopia".

re-authenticate from the command-line by doing a git fetch

Well, the process starts on the command line, but it sends you to the browser, which eventually directs to a localhost address. Between that blank page and the command line instructing me to complete authentication via the browser, I naturally concluded something had gone wrong. But, no, that's apparently what success looks like! Who knew?

@rothja
Copy link

rothja commented Aug 1, 2023

I could not fix this (by upgrading git & removing my credentials and reauthenticating) until I did that plus uninstall VS Code. After removing my credentials, removing the credential manager, uninstalling VS Code, reinstalling VS Code, and then setting up my credential managers and git credentials again in git bash, it worked. Just in case this helps anyone...

UPDATE: Ignore this. It was gone for 12 hours after doing this, and now the duplicate account and dialog is back. Not sure what to try now.

@RobCannon
Copy link

Here is my git config from WSL:

file:/home/rob/.gitconfig       user.name=Rob Cannon
file:/home/rob/.gitconfig       user.email=redacted
file:/home/rob/.gitconfig       credential.helper=/mnt/c/Program\ Files/Git/mingw64/bin/git-credential-manager.exe
file:/home/rob/.gitconfig       fetch.prune=true
file:/home/rob/.gitconfig       push.default=simple
file:/home/rob/.gitconfig       init.defaultbranch=main
file:/home/rob/.gitconfig       help.autocorrect=1
file:/home/rob/.gitconfig       pull.rebase=false
file:/home/rob/.gitconfig       core.editor=code --wait

@RobCannon
Copy link

OK, now I am no longer getting the duplicate account dialog, but I get the authenticate dialog (which ends opens up a browser window to authenticate) every few minutes.

ARGHH!!!

@Djfe
Copy link

Djfe commented Aug 2, 2023

Even after running git config --global --unset-all credential.helper:
This was caused by there being two entries for me in 2.41.0(3):
I had to delete both at the same time

The next time I needed credentials, I had to relog using the browser (once), that was it

So yeah, this was not fixed by an update, I had to do manual intervention and I'm likely not the only one still affected
(I'm not using WSL)

@RobCannon
Copy link

OK, everything has been working fine this morning. I re-cloned my repos without specifying the userid in the url (as was suggested somewhere) and I have not seen a dialog since. Hopefully that will continue through the whole day.

For anyone using WSL, yesterday (suddenly) WSL was unable to execute Windows executables and that resulted in a an error calling git-credential-manager.exe.

/mnt/c/Program\ Files/Git/mingw64/bin/git-credential-manager.exe get: 1: /mnt/c/Program\ Files/Git/mingw64/bin/git-credential-manager.exe: Exec format error

I found a fix here:
microsoft/WSL#9887 (comment)

sudo tee /usr/lib/binfmt.d/WSLInterop.conf > /dev/null <<'EOF'
:WSLInterop:M::MZ::/init:PF
EOF

@mjcheetham
Copy link
Collaborator

mjcheetham commented Aug 2, 2023

UPDATE: Ignore this. It was gone for 12 hours after doing this, and now the duplicate account and dialog is back. Not sure what to try now.

@rothja, please can you set the following Git config and when you get a repro of the repeated auth prompt, complete auth and then send over the resulting log file.

# Windows
git config --global credential.trace C:\Users\USERNAME\gcm.log

# Mac/Linux
git config --global credential.trace /tmp/gcm.log

You may want to glance over the file for any private information before sharing, for good measure.

To turn off the logging after, you can run the following:

git config --global --unset credential.trace

@RobCannon
Copy link

Another day, another problem. Or rather back to the first problem. I, too, am getting the duplicate account dialog again.

I am attaching my credential trace.
gcm.log

@RobCannon
Copy link

I just want to make sure that WSL should still have this setting:

>  git config --show-origin --get-all credential.helper
file:/home/rob/.gitconfig       /mnt/c/Program\ Files/Git/mingw64/bin/git-credential-manager.exe

It is different than what is set in my Windows prompt, which is:

>  git config --show-origin --get-all credential.helper
file:C:/Program Files/Git/etc/gitconfig manager

@UTshion
Copy link

UTshion commented Aug 4, 2023

Hi, I am using VScode Remote Containers and had the same issue.
However, thanks to the comments on this thread, I was able to prevent the user selection popup from appearing every time I perform a Git operation.

I think there might be others who use a similar environment to mine, so I would like to summarize here what I have done to deal with the situation.
I hope my notes helps you.


Environment

WSL2+Docker+VScode

Versions

[Host]
Windows 11 Pro 22H2
WSL2 : 1.2.5.0
Docker Desktop : 4.22.0

[Container]
Ubuntu 20.04.6 LTS
Git : 2.25.1
GCM : 2.2.2

My operation

  1. I ran git config --show-origin --get-all credential.helper, and found there were two credentials. Therefore, I also ran git config --global --unset-all credential.helper to delete the one.
    After that, I ran git config --show-origin --get-all credential.helper again and identified there was only one credential.

  2. I signed out the Github account in VScode. Next, I opened Windows Credential Manager, and found there were some similar entries which contain the phrase "git" or "github".
    I deleted all of those credentials except git:https://github.com and Github - https://api.github.com/UTshion, but that didn't work!

  3. According to the comments above, I also deleted "git:https://github.com". Fortunately, that worked! And after I re-authenticated my Git account in VScode once, I have never seen the poppup.
    During the re-authentication, as @aidtopia mentioned, I was also faced the situation: the browser sent me to localhost address for requiring me to authenticate the account, but nothing was displayed.
    It gives me somewhat hazy feelings, but I think I seem to have solve the problem for now, so I decided not to care...


This is my first time writing such a long comment in English, so I apologize if it is unclear or incorrect.

@RobCannon
Copy link

I followed the advice of @UTshion and I signed out of GitHub from VSCode, removed all of the Git and GitHub entries from Windows Credential manager and signed in again. I have not had problems since, but I need to work through a whole business day or two before I can declare victory.

@RobCannon
Copy link

OMG, literally seconds after posting the above, I got the duplicate account dialog again! It is showing with every git interaction again!!!

@RobCannon
Copy link

I am beginning to think that I have several extensions that all sign into GitHub and one of them is generating a different credential type and that is what causes the Duplicate Account dialog box. Now to figure out which one is doing it...

@ldennington
Copy link
Contributor

@RobCannon - the following should force GCM to use the correct username for all GitHub repos:

git config --global credential.https://git.luolix.top.username robcannon

Hopefully that will resolve the issue for you.

@mjcheetham
Copy link
Collaborator

We've updated our docs on this issue for future reference: https://gh.io/gcm/multipleusers#tldr-tell-gcm-to-remember-which-account-to-use

@rothja this may also help solve your situation also.

@v-thepet
Copy link

YES. THANK YOU @ldennington - After many hours spent with GitHub Support and our company's IT team troubleshooting this issue, which started 7/13 for me, that line looks like it worked:

git config --global credential.https://git.luolix.top.username v-thepet

No more prompt on every remote action.

I won't say so for sure just yet, as I thought the problem was solved a couple of times before and it came back.

@FBoucher
Copy link
Author

Feels like I should close this issue now, right?

@ldennington
Copy link
Contributor

Yes, I believe we are good to close this - I will go ahead and do so.

javierjulio added a commit to javierjulio/laptop that referenced this issue Aug 24, 2023
As documented by git-credential-manager here: https://github.com/git-ecosystem/git-credential-manager/blob/main/docs/multiple-users.md#tldr-tell-gcm-to-remember-which-account-to-use

Otherwise it may prompt you to select an account (javierjulio or x-access-token) on any git action.

git-ecosystem/git-credential-manager#1325
@ldennington ldennington unpinned this issue Sep 18, 2023
@alexhiggins732
Copy link

git credential-manager github list returned no output for me.

My fix was simply to open the windows credential manager and modify the user name on each "Personal Access Token" account to "Personal Access Token 1" , "Personal Access Token 2", etc to identify the correct account.

I then removed the duplicitous accounts in Windows credential manager and the issue went away.

@Constantine-Ketskalo
Copy link

Hi, I am using VScode Remote Containers and had the same issue. However, thanks to the comments on this thread, I was able to prevent the user selection popup from appearing every time I perform a Git operation.

I think there might be others who use a similar environment to mine, so I would like to summarize here what I have done to deal with the situation. I hope my notes helps you.

Environment

WSL2+Docker+VScode

Versions

[Host] Windows 11 Pro 22H2 WSL2 : 1.2.5.0 Docker Desktop : 4.22.0

[Container] Ubuntu 20.04.6 LTS Git : 2.25.1 GCM : 2.2.2

My operation

  1. I ran git config --show-origin --get-all credential.helper, and found there were two credentials. Therefore, I also ran git config --global --unset-all credential.helper to delete the one.
    After that, I ran git config --show-origin --get-all credential.helper again and identified there was only one credential.
  2. I signed out the Github account in VScode. Next, I opened Windows Credential Manager, and found there were some similar entries which contain the phrase "git" or "github".
    I deleted all of those credentials except git:https://github.com and Github - https://api.github.com/UTshion, but that didn't work!
  3. According to the comments above, I also deleted "git:https://github.com". Fortunately, that worked! And after I re-authenticated my Git account in VScode once, I have never seen the poppup.
    During the re-authentication, as @aidtopia mentioned, I was also faced the situation: the browser sent me to localhost address for requiring me to authenticate the account, but nothing was displayed.
    It gives me somewhat hazy feelings, but I think I seem to have solve the problem for now, so I decided not to care...

This is my first time writing such a long comment in English, so I apologize if it is unclear or incorrect.

Thanks. I've updated git bash first and then followed these instructions and finally it worked for me as well. By the way I have both vs and vs code, so I've logged out from github in both apps just in case, even though I've been getting this duplicated account choice only from vs.

Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment
Labels
bug A bug in Git Credential Manager host:github Specific to the GitHub host provider platform:windows Specific to the Windows platform
Projects
None yet