Remove credentials from Git
我正在使用多个存储库,但是最近我只在内部存储库中工作,一切都很棒。
今天,我不得不提交代码并将其推送到其他代码中,但是我遇到了一些麻烦。
1 2 3 | $ git push appharbor master error: The requested URL returned error: 403 while accessing https://[email protected]/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'
为了避免凭证缓存...
似乎没有任何作用; 有谁有更好的主意吗?
Git凭证缓存运行一个守护进程,该进程将您的凭证缓存在内存中并按需分发。因此,杀死git-credential-cache--daemon进程会丢弃所有这些东西,如果继续使用它作为cache.helper选项,则会导致重新提示您输入密码。
您还可以使用
在Windows上,最好使用管理器帮助器(
从Windows手册中摘录,详细介绍Windows凭据存储面板:
Open User Accounts by clicking the Start button Picture of the Start button, clicking Control Panel, clicking User Accounts and Family Safety (or clicking User Accounts, if you are connected to a network domain), and then clicking User Accounts. In the left pane, click Manage your credentials.
如果Windows计算机上出现此问题,请执行以下操作。
- 转到凭证管理器
- 转到Windows凭据
- 删除"通用凭据"下的条目
- 重新尝试连接。这次,它将提示您输入正确的用户名和密码。
重新输入:
1 | $ git config credential.helper store |
然后将提示您再次输入您的凭据。
警告
Using this helper will store your passwords unencrypted on disk
资料来源:https://git-scm.com/docs/git-credential-store
我遇到了与OP相同的问题。它使用了存储在系统中某个地方的旧Git凭据,并且我想将Git与新凭据一起使用,因此我运行了命令
1 | $ git config --system --list |
这显示了
1 | credential.helper=manager |
每当执行
控制面板→用户帐户→凭据管理器→管理Windows凭据。
我只是删除了这些凭据,当我执行
尝试使用以下命令。
1 | git credential-manager |
您可以在此处获得各种选项来管理您的凭据(请检查以下屏幕)。
或者,您甚至可以直接尝试以下命令:
1 | git credential-manager uninstall |
这将开始在每个服务器交互请求上再次提示输入密码。
就我而言,Git使用Windows存储凭据。
您所需要做的就是删除Windows帐户中存储的凭据:
我找到了对我有用的东西。当我向OP写评论时,我未能检查系统配置文件:
1 | git config --system -l |
显示一个
1 | credential.helper=!github --credentials |
线。我取消了
1 | git config --system --unset credential.helper |
现在忘记了凭据。
1 | git config --list |
将显示
要为您当前的本地git文件夹禁用此缓存的用户名/密码,只需输入
1 | git config credential.helper"" |
这样,git每次都会提示输入密码,而忽略" manager"中保存的内容。
在带有" wincred" *的Windows 2003 Server中,没有其他答案对我有帮助。我不得不使用
-
cmdkey /list 列出所有存储的凭据。 -
cmdkey /delete:Target 删除具有"目标"名称的凭据。
(*用" wincred"表示
进行" git pull"时遇到相同的错误,这就是我解决的方法。
需要分别使用github
在Windows中清除用户名和密码
控制面板用户帐户凭据管理器
编辑Windows凭证
删除现有用户,现在转到命令提示符,编写push命令,该命令显示github弹出窗口,输入
现在,我们可以在切换用户之后推送代码。
当您在同一台计算机上使用多个Git帐户时,会出现此错误。
如果您使用的是macOS,则可以删除github.com的已保存凭据。
请按照以下步骤删除github.com凭证。
完成
如果使用Windows的Git Credential Manager(当前版本通常这样做):
1 | git credential-manager clear |
这是在2016年中添加的。要检查是否使用凭证管理器:
1 2 | git config --global credential.helper → manager |
从Windows当前登录用户文件夹中的.gitconfig文件中删除以下行:
1 2 | [credential] helper = !"C:/Program Files (x86)/GitExtensions/GitCredentialWinStore/git-credential-winstore.exe" |
这对我有用,现在当我按下遥控器时,它会再次要求我输入密码。
您必须在凭据管理器中对其进行更新。
转到控制面板>用户帐户>凭据管理器> Windows凭据。您会在列表中看到Git凭据(例如git:https://)。单击它,更新密码,然后从Git bash执行git pull / push命令,它不会再抛出任何错误消息。
在Windows上,至少
1 | git remote show origin |
您可以从以下文件
就我而言,我找不到Windows凭据管理器(Windows 7)中保存的凭据。
我能够通过执行重置我的凭据
1 | git config --global credential.helper wincred |
老实说,真是个冰雹玛丽,看看它是否会抹掉我的证书,并且确实有效。
在Windows 10 Professional上使用Windows的最新版本git时,我遇到了类似的问题,即我有两个不同的GitHub帐户以及一个Bitbucket帐户,因此VS2017,git扩展和git bash有点令人困惑。
我首先检查了git如何使用此命令处理我的凭据(使用提升的命令运行git bash,否则会出错):
1 | git config --list |
我找到了"凭证管理器"条目,因此我单击了"开始"按钮>键入"凭证管理器",然后左键单击了启动应用程序的凭证管理器"大喊"安全图标。然后,我单击Windows凭据选项卡,找到我当前的git帐户(恰好是Bitbucket)的条目,因此我删除了此帐户。
但这并不能解决问题,因此下一步是取消凭据,我是在笔记本电脑上的存储库目录中执行此操作的,其中包含我要推送到远程的GitHub项目。我输入了以下命令:
1 | git config --system --unset credential.helper |
然后我进行了git push,然后提示我输入我输入的GitHub用户名(我需要的正确用户名),然后关联的密码和所有内容都正确推送了。
我不确定这会带来多大的影响,大多数人可能都只使用一个仓库,但我必须跨多个仓库并使用不同的提供程序,因此可能再次遇到此问题。
最终为我解决的问题是使用GitHub桌面,转到存储库设置,然后从存储库URL中删除user:pass @。然后,我尝试从命令行进行推送,并被提示输入登录凭据。我把这些放进去之后,一切恢复了正常。 Visual Studio和命令行都可以使用,当然GitHub桌面也可以使用。
GitHub桌面->存储库->存储库设置->远程选项卡
从以下位置更改主远程存储库(来源):
https://pork@[email protected]/MyProject/MyProject.git
至:
https://github.com/MyProject/MyProject.git
点击"保存"
凭据将被清除。
对于macOS用户:
当您在同一台计算机上使用多个Git帐户时,会出现此错误。
请按照以下步骤删除github.com凭证。
选择github.com并右键单击它
删除" github.com"
再试一次将其推入或拉入git,它将要求提供凭据。
输入存储库帐户的有效凭证。
完成
要清除Windows缓存的Git凭据管理器,请执行以下操作:
1 | rm $env:LOCALAPPDATA\GitCredentialManager\tenant.cache |
要么
1 | rm %LOCALAPPDATA%\GitCredentialManager\tenant.cache |
在本例中,清除用户.git-credentials文件中的密码对我们有用。
1 | c:\users\[username]\.git-credentials |
当上述任何方法都不对您有用时,请尝试此操作。
1 | git config credential.helper 'cache --timeout=30' |
这将每3秒删除一次缓存,并要求输入用户名和密码。您可以使用增加的超时值重新运行该命令。
如果使用密钥对进行了身份验证,则可以删除或移动私钥,或者停止密钥代理并尝试。
正如以上每个人所提到的,这是一个
由于权限的原因,我无法修改我的凭证或操纵凭证管理器。
我也负担不起在PC上以纯文本形式设置密码。
解决方法是删除
从@patthoyts的最高答案(https://stackoverflow.com/a/15382950/4401322)构建:
他的答案使用但不解释"本地"对"全局"对"系统"配置。他们的官方git文档在这里,值得一读。
例如,我在Linux上,并且不使用系统配置,因此我从不使用
我的用例是我有两个Github凭证;一种是工作,另一种是娱乐。
这是我处理问题的方法:
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 | $ cd work # do and commit work $ git push origin develop # Possibly prompted for credentials if I haven't configured my remotes to automate that. # We're assuming that now I've stored my"work" credentials with git's credential helper. $ cd ~/play # do and commit play $ git push origin develop remote: Permission to whilei/specs.git denied to whilei. fatal: unable to access 'https://github.com/workname/specs.git/': The requested URL returned error: 403 # So here's where it goes down: $ git config --list | grep cred credential.helper=store # One of these is for _local_ credential.helper=store # And one is for _global_ $ git config --global --unset credential.helper $ git config --list | grep cred credential.helper=store # My _local_ config still specifies 'store' $ git config --unset credential.helper $ git push origin develop Username for 'https://github.com': whilei Password for 'https://[email protected]': Counting objects: 3, done. Delta compression using up to 12 threads. Compressing objects: 100% (2/2), done. Writing objects: 100% (3/3), 1.10 KiB | 1.10 MiB/s, done. Total 3 (delta 1), reused 0 (delta 0) remote: Resolving deltas: 100% (1/1), completed with 1 local object. To https://github.com/whilei/specs.git b2ca528..f64f065 master -> master # Now let's turn credential-helping back on: $ git config --global credential.helper"store" $ git config credential.helper"store" $ git config --list | grep cred credential.helper=store # Put it back the way it was. credential.helper=store |
还值得注意的是,有一些方法可以完全避免此问题,例如,您可以将