Windows:Git使用了旧的GitHub用户名,无法更改Git用户。

12

我有两个 github 账户,旧的和新的。当我在新的账户上检出一个代码库时,无法提交,因为它提示我的旧 github 用户未经授权。

假设我的旧 github 帐户用户名是 old,电子邮件是 old@old.com。 假设我的新 github 帐户用户名是 new,电子邮件是 new@new.com

旧的 github 帐户没有关联 SSH 密钥。 新帐户有我的 SSH 密钥。由于我使用的是 Windows 系统,在 putty/pagent 使用 ppk 格式,但 gitbash 使用的是 RSA,所以 SSH 密钥有点麻烦。不久前,我成功地将我的 ppk 转换为 RSA,并将其放入了我的 Windows 用户 .ssh 目录中。

我已经完成了以下步骤:

$ git config --global user.name new
$ git config --global user.email new@new.com

如果我这样做:

$ git config --global -l
$ git config -l

我明白了:

 user.email=new@new.com
 user.name=new

当我尝试执行$git push origin

remote: Permission to new/test.git denied to old.
fatal: unable to access 'https://github.com/new/test.git/': 
403 user old not authorised

如果我使用gitbash、tortoise或VS code进行推送,就会出现这个错误。

如果我删除克隆的仓库,从头再次克隆,然后提交任何内容,问题仍然存在。

$ git clone git@github.com:new/test.git

有没有想法为什么以及从哪里获取旧用户?在我的电脑上没有任何关于旧GitHub用户的参考,它阻止我无法完成任何工作。

似乎没有办法从GitHub中删除旧用户,但即使我可以,也可能仍然无法解决问题。几个月来,我一直无法工作,因为我无法提交任何东西到 GitHub。

我尝试的另一件事是在克隆存储库后编辑 .git/config 文件。我尝试将 https 更改为 ssh url,因为多年来使用 GitHub 时 https 从未对我起作用。https 允许您进行克隆,但永远无法推送。如果我使用正确的 vodoo 使用 ssh 进行检出,它曾经有效,但现在总是因没有明显原因而获取旧用户。


user.nameuser.email配置值在Github或其他地方进行身份验证时没有任何作用。它们仅在创建或修改提交时在本地使用。 - axiac
这个有帮助吗? - Christoph
@Christoph,它并没有直接帮助,但它确实引出了一个问题:它是否使用了一些缓存的用户名/密码而不是我的证书?如果是这样,我该如何清除它? - John Little
@JohnLittle "它是否使用了一些缓存的用户名/密码而不是我的证书?" 是的,正如我所提到的,但它是缓存的https凭据,与SSH证书无关。 - VonC
你的问题解决了吗?怎么解决的? - Christoph
6个回答

12

无法访问 'https://github.com/new/test.git/':

这意味着:SSH 没有被涉及。
而 user.name / user.email 也与身份验证无关。

由于您使用的是 https,Git 将使用在 github.com 上找到的第一个缓存凭据。
检查 git config credential.helper 的返回值。
例如,在 Windows 上,这将是 Windows 凭据管理器。

您至少应该在 URL 中指定新的 GitHub 帐户:

cd /path/to/your/local/repo
git remote set-url origin https://<newGitHubAccount>@github.com/newGitHubAccount/test.git

然后进行Git推送应该会触发一个弹出窗口,询问您的新GitHub账户密码。

如果您愿意,还可以切换回SSH。
您可以像我在这里描述的那样管理多个SSH密钥。


4
您可以使用credential.user,将用于身份验证的用户名与 Git 作者名称分开指定。您可以将其设置为全局 (git config --global credential.user mylogin) 或仅针对单个存储库。这将解决 HTTPS 身份验证的变化。Github 使用 HTTPS 可以进行推送。要调试问题,请在GIT_CURL_VERBOSE=1下运行 git 命令,以查看 Web 头。例如:GIT_CURL_VERBOSE=1 git ls-remote https://github.com/username/repo.git。如果启用了双重身份验证,则不能使用普通密码,必须使用从网站获取的密钥。

请注意,puttygen 可以导入 SSH RSA 密钥对并将其转换为 PPK 密钥文件,也可以进行反向操作,因此您可以将密钥从 openssh 转换为 putty。

如果配置使用 SSH 密钥,则密钥用于您的身份验证。您可以在GIT_TRACE=1下运行 git 命令,以查看它实际运行的内容。如果是 putty/plink,则需要检查存储在注册表中的 putty 会话信息,并查看已关联 github 会话的密钥是什么。如果是 openssh,则密钥应该在$HOME/.ssh/id_rsa中,您可以检查那里有哪个用户密钥。


3

user.name在你的配置文件中是提交信息中显示的用户名,而不是用于授权到git存储库的用户名。

当你克隆远程代码库时,你传递给github/ url中使用的是哪个用户名?对于已经存在的代码库,git remote -v显示了什么内容?

或者,你可能正在使用凭证缓存 - 你可以尝试使用git credential-cache exit命令来清除缓存?


FYI,我在克隆URL中没有传递任何用户名。它从配置全局user.email中获取。如果我取消设置它,那么我就无法克隆 - 它会说我需要设置它。Github使用user.mail来关联帐户。我过去常常使用SSH克隆URL,但最近如果我这样做,我就无法提交。我不得不使用git:URL才能提交。 - John Little
2
GitHub不使用user.email进行登录,只用于将提交与您的帐户关联。如果您正在使用http:// URL,则缺少用户名意味着它应提示输入用户名,否则将使用凭据缓存。对于git://,它将使用与GitHub帐户相关联的ssh密钥 - 因此您可能需要生成新密钥或将现有密钥与新帐户关联。 - match
"git credential-cache exit" 返回 "credential-cache" 不是一个 git 命令,很遗憾。 - John Little
看起来Windows可能会使用不同的助手 - 请参见:https://blog.sdbarker.com/post/git-credential-caching-on-windows-update/ - match

1
对于Windows用户: 按照以下步骤操作: 控制面板 >> 用户账户 >> 凭据管理器 >> Windows凭据 >> 通用凭据
删除git凭据。 下次推送仓库时,系统会要求您提供凭据。

0
尝试使用“credential.helper=manager”而不是“credential.helper=store”。我和John Little遇到了同样的问题:即使我更改了用户名和电子邮件,并且git config --list命令正确列出了新帐户值,但在我将credential.helper也更改为“manager”之前,我仍然无法访问远程存储库。
希望对你有所帮助, Remus

0

Windows 10

有时候,唯一的解决方案可能是打开 开始菜单 > 凭据管理器 并添加:

Url:  git:https://github.com
Username:   your_username
Pass:    your_app_password   (if you leave empty, it will ask password)

然后,将本地配置切换到您匹配的用户名(其他人已经回答了如何更改)。


网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接