从Git中删除凭据

985

我正在处理几个代码库,但最近只在我们内部的那个上工作,一切都很顺利。

今天我必须提交并推送代码到另一个代码库,但是我遇到了一些问题。

$ git push appharbor master
error: The requested URL returned error: 403 while accessing https://gavekortet@appharbor.com/mitivo.git/info/refs?service=git-receive-pack
fatal: HTTP request failed

我无法做任何事情,以便再次出现输入密码的提示。

我该如何在我的系统上重置凭据,以便Git会要求我输入那个仓库的密码?

我已经尝试过:

  • git config --global --unset core.askpass

以取消密码:

  • git config credential.helper 'cache --timeout=1'

以避免凭据缓存……

似乎没有什么作用,有没有更好的想法?


你有一个 ~/.netrc 文件吗? - robinst
4
@robinst,这是一台Windows电脑,我无法找到那个文件,即使在Git Bash中也找不到... - balexandre
对于Windows机器,我更喜欢使用新的(git 1.8.3)凭据助手netrc,它可以将多个凭据存储在加密文件中。这比每次为每个会话输入密码要好,因为缓存只会为一定时间“缓存”密码。请参见此处的完整示例 - VonC
我没有 .netrc 文件。我在 ~(C:\Users\Myself)中有一个名为 .git-credentials 的文件,但擦除它并没有起作用,我仍然登录到 Git Shell。此外,控制面板凭据管理器似乎没有存储任何内容。本地和全局 Git 配置文件看起来都没问题。我的工作站是从一位离职的员工那里继承而来的,所以他可能设置了一些我不知道如何关闭的非正统凭据缓存机制。我希望这种行为不是 Git Windows 的默认行为。在 Mac 上,凭据缓存是默认的,但至少会显示在钥匙串访问中。 - damix911
1
关注安全的人可能希望在此之后确保执行 rm ~/.git-credentials。被提示输入密码并不意味着它们没有被存储。 - ribamar
显示剩余3条评论
40个回答

4

对于 Windows 10,前往以下路径:

控制面板\User Accounts\Credential Manager

在此位置有两个选项卡:

  1. Web 凭据和 2. Windows 凭据。

点击 Windows 凭据选项卡,在“通用凭据”中,您可以看到存储的 GitHub 凭据。

您可以从这里删除它们并尝试重新克隆 - 现在会要求输入用户名/密码,因为我们刚刚从 Windows 10 系统中删除了存储的凭据。


4

在 @ericbn 的 https://dev59.com/hGUp5IYBdhLWcg3wRWFD#41111629 基础上,这里是一些示例命令,我将它们嵌入了一个脚本中,在密码更新时运行该脚本以更新所有密码。由于它非常具体,因此可能无法直接使用,但它展示了cmdkey.exe的实际应用。

⚠ 这是在 cygwin 中运行的 shell 脚本 ⚠

⚠ 这个可以工作是因为我使用私有git存储库,它们都使用相同的密码进行身份验证 (您可能不希望使用相同的凭据进行循环,但是您可以重复使用此示例的/list命令来提取已经注册的凭据列表) ⚠

entries=`cmdkey.exe /list: | grep git | sed -r -e 's/^[^:]+:\s*(.*)$/\1/gm'`
for entry in ${entries}
do
    cmdkey.exe "/delete:${entry}"
    cmdkey.exe "/generic:${entry}" "/user:${GIT_USERNAME}" "/pass:${GIT_PASSWORD}"
done

3

如果以上所提到的方法都不起作用,请尝试以下方法。

最初的回答:

尝试在以上方法都失败时使用此方法。

git config credential.helper 'cache --timeout=30'

这将每3秒清除缓存,并要求输入用户名和密码。您可以使用更长的超时值重新运行该命令。

原始答案:最初的回答


3

Mac 设备的解答:

前往

应用程序/实用工具/钥匙串访问

搜索 git.credentials,并删除所需 URL 的 git 凭据。


3
在PowerShell控制台中执行以下命令以清除Windows Git凭据管理器缓存:
git credential-manager clear
rm $env:LOCALAPPDATA\GitCredentialManager\tenant.cache

最初的回答
或者在Cmd.exe中
rm %LOCALAPPDATA%\GitCredentialManager\tenant.cache

2
正如大家所说,这是一个Git凭证管理器的问题。由于权限限制,我无法修改我的凭证或操作凭证管理器。我也不能把密码明文放在电脑上。解决方法是在Intellij中删除远程分支并重新添加远程分支。这将删除存储的凭证并强制刷新凭证。

enter image description here


1
正如您从其他答案中看到的那样,您可以简单地从Windows证书存储中删除证书,这是最简单的方法。有时候您不能简单地移除远程,因为密码已经存储在证书缓存中,下次添加相同的远程时,它将使用缓存的证书。 - balexandre
我猜您可能是在使用“证书”一词而不是“凭证”。由于我的电脑政策限制,我无法访问我在帖子中描述的“凭证”存储。实际上,我无法将它们删除。使它们失效的是删除远程分支并重新添加它。而且不,它不会重复使用缓存的“凭证”。 - Akin Okegbile

2
在您的项目根目录下打开.git/config文件。该文件包含有关远程URL和凭据类型的详细信息。
此文件中当前的远程URL可能会存储凭据。从GitHub复制远程URL并更新此配置文件中的URL。
如下所示:
[remote "origin"]
    url = [update it]
    fetch = +refs/heads/*:refs/remotes/origin/*
[credential]
    helper = manager

现在当您尝试推送代码时,它会要求凭据。谢谢。

1
如果git config credential.helper返回manager-core(来自跨平台GCM -- Git Credential Manager Core项目),您可以:
  • 保持此设置不变

  • 使用跨平台的GCM命令删除您的凭据:

    printf "host=github.com\nusername=xxx\nprotocol=https" | \
      git credential-manager-core erase
    
检查它是否已经消失:
  printf "host=github.com\nusername=xxx\nprotocol=https" | \
    git credential-manager-core get

(将xxx替换为您的GitHub用户名)
(将github.com替换为实际的远程Git存储库托管服务器:gitlab.combitbucket.comyourOwnServer.com

如果您看到要求输入凭据,请点击“取消”:之前的凭据已从操作系统底层的秘密管理器(Windows凭据管理器,Linux libsecret或Mac osxkeychain)中删除

在下一次git push时,按照GCM-core凭据助手提示输入您的凭据:您的新凭据将被存储。


@Wolfgang 感谢您的编辑:确实需要小写键。 - VonC

0
如果您使用密钥对进行身份验证,则可以删除或移动您的私钥,或停止密钥代理并尝试。

2
他正在使用https,因此这里没有涉及到密钥。 - CharlesB

0
在我的Win 10上,找不到Windows凭据管理器或.git-凭据。解决方法是打开Git GUI并推送代码。然后它会要求输入凭据,这也会更新Git Bash的缓存密码。

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