无法为命令行 Git 切换 GitLab 帐户

Posted

技术标签:

【中文标题】无法为命令行 Git 切换 GitLab 帐户【英文标题】:Can't switch GitLab accounts for command-line Git 【发布时间】:2020-12-16 22:02:41 【问题描述】:

这可能被标记为重复,我已经尝试了搜索中弹出的类似问题中的所有修复,但没有一个有效。

基本上我是用公司的GitLab账号来推送的,但是因为一些原因决定切换到我的个人账号。除非我找不到这样做的方法。

~/.git-credentials 文件不存在,当我尝试打开它时 nano 只是给了我一个新文件。 ~/.git-config 文件已经包含我的个人帐户的电子邮件和用户名(但没有密码),并且我在 GitLab 的存储库页面上的提交归因于我的个人帐户。然而,Git 从来没有要求输入密码(所以我怀疑它实际上已经登录了)。此外,贡献没有显示在我的个人概览页面(彩色小日历)上,而是显示在以前帐户的概览页面上。

我也试过这两个(分别):

git config --global --unset credential.helper

git credential-cache exit

没有任何变化。仍然让我在不要求凭据的情况下推送,并且提交仍然显示在错误帐户的概览中。

我还检查了 git-credential-store documentation(正如在类似问题中所建议的那样),不管它值多少钱,$XDG_CONFIG_HOME 是空的,$HOME/.config/git/ 也不存在。

有人建议去 GitLab 网站上的 Access Tokens 并删除那里的相应令牌,但它说“此用户没有有效的访问令牌。”

我什至尝试过卸载并重新安装 Git,但它完全没有改变。

我已经束手无策了。知道这些该死的凭据可能存储在哪里,或者有一种强制注销的方法吗?

编辑:一位同事为我部分修复了它。我的两个帐户都通过 SSH 进行了身份验证,而 GitLab 只使用我首先连接的一个,即公司帐户。

我删除了两个 SSH 密钥,生成了一个新密钥,这一次只验证了我的个人帐户。它现在正在工作。我想要一种可以在帐户之间切换的方法(我必须同时使用这两个帐户),而不必每次都通过 SSH 重新进行身份验证,如果有人仍然有想法,我愿意接受。

【问题讨论】:

您使用的是 HTTPS 还是 SSH?您是否阅读过 [Git FAQ(git-scm.com/docs/gitfaq) 的相关部分? 回购是通过 SSH 克隆的。这很奇怪,因为即便如此,我第一次推送时,它还是要求我输入用户名和密码。只有那一次,以后再也不会了。 您可以编辑您的问题以将git remote -v 显示为代码块吗? 在 Linux 上使用 ssh,您有很多选择。通常,您将运行ssh-agent 并让它存储(和转发)密钥,ssh-add -l 将列出您当前的所有密钥。如果您需要添加一个,ssh-add 会让您将其添加到堆中。但是这里有一个问题:许多 服务器 只听前 N 个键,所以如果你有很多键,你会在到达正确的键之前用错误的键运行允许的数字。据我所知,没有标准的解决方案。 虽然只有两个密钥,但您应该能够同时添加两个密钥,而且一切正常,但至少在一种情况下您将交出一个额外的密钥。 【参考方案1】:

repos 是通过 SSH 克隆的。这很奇怪,因为即便如此,我第一次推送时,它还是要求我输入用户名和密码。只有那一次,以后再也不会了。

不过,这看起来像 HTTPS URL。使用存储库中的git remote -v 进行检查。 您将操纵的任何凭据帮助程序设置只会影响 HTTPS URL。

这是 SSH,那么您需要更改这些 URL 以使用 ~/.ssh/config 条目

Host <HostEntry>
   Hostname xxxx.xx.xx
   User ubuntu
   IdentityFile ~/.ssh/my_second_key.pem

新网址为:

ssh <HostEntry>

【讨论】:

以上是关于无法为命令行 Git 切换 GitLab 帐户的主要内容,如果未能解决你的问题,请参考以下文章

如何在 Intellij Idea 中切换到另一个 git 帐户 [重复]

gitlab常用命令

为啥我的 github 帐户连接到命令行? [复制]

pycharm切换git为terminal

github、gitlab、gogs 等 git 项目标准开发流程

gitlab宕机无法再次重启解决办法