如何重置 'git credential-osxkeychain' 中存储的凭据?

156

我按照GitHub的设置说明进行了操作,成功克隆了仓库,但无法将文件推送到远程。

当我执行“git push”命令时,出现了403错误。URL是正确的,我尝试运行“git credential-osxkeychain get”命令查看它返回的内容,结果证明我的凭据是错误的。

我认为问题是第一次要求输入凭据时,我误认为是另一个应用程序的请求,并输入了错误的凭据。

我需要重置它,以便使用正确的钥匙串项来连接我的GitHub账户。

我已经尝试过:

git credential-osxkeychain erase
git credential-osxkeychain set
程序从来没有给出任何提示。如果我做错了什么,Set会说“错误的输入”。我尝试输入“password=password”等内容,但是当我执行“get”操作时,我仍然得到旧的内容。
我无法确定这些内容存储在哪里,因为它们不在.gitconfigure文件中。此外,最近也没有任何可能相关的钥匙串项目。(我的钥匙串中有几个GitHub账户,但它没有使用其中任何一个。)

相关的,凭据助手不可知:https://dev59.com/_WEi5IYBdhLWcg3wCYGY - Ciro Santilli OurBigBook.com
很可能在Windows上也是一样的:https://dev59.com/hGUp5IYBdhLWcg3wRWFD - Ciro Santilli OurBigBook.com
你可以设置这个辅助工具,将你的登录与特定的仓库关联起来,而不是整个域名,以防你想使用多个账户。更多信息请参见这里:https://dev59.com/XV0Z5IYBdhLWcg3whQsj#31351376 - davidcondrey
10个回答

228

从终端: (您需要输入以下三行内容)

 $ git credential-osxkeychain erase ⏎
 host=github.com  ⏎
 protocol=https   ⏎
 ⏎
 ⏎

注意: 在您输入“protocol=https”后,您需要按两次~~RETURN~~键(每个 '⏎' 相当于按一下 'enter/return' 键)


6
由于某些原因,我在Keychain应用程序中找不到任何Git/GitHub凭据,但这个方法有效。谢谢! - Donald
12
因为这个不是很清楚:你需要输入上面的所有三行,然后再按一次回车键——也就是说,上面的第二和第三行不是命令的输出,而是输入。 - Frederik
这个答案帮了我很多,非常感谢! - Ken Flake
1
有没有人能解释一下这个是干什么的?@maz - Ojasv singh
2
@Ojasvsingh 它会从你的钥匙串中移除 github.com 条目。这意味着下一次尝试连接时将检测到不再有条目。这意味着你将被提示输入 github.com 的当前凭据。 - maz
显示剩余4条评论

95

我不确定如何通过命令行擦除,但是可以在Keychain Access应用程序中轻松完成。只需转到“应用程序”->“实用工具”->“密钥链访问”,然后输入“github.com”。您可以从该应用程序中删除无效的条目或更新密码。


5
如果有人阅读此内容并从命令行执行成功,希望能够知道具体方法。 - funroll
1
@funroll 命令行工具是 security。手册中指出它有一个 delete-internet-password 命令。 - benzado
谢谢您的更新,我相信这对某些人会很有用。 - funroll
从哪个钥匙串? - Bryan Bryce

39
尝试在命令行中执行以下操作:

git config --local credential.helper ""

当我使用多个GitHub账户时,这对我每次都有效(我是在OSX的keychain中存储我的凭据)。

1
这可能不是基于问题标题的被接受的答案,但它绝对在提问者试图达到的上下文中非常有用。如果您的密码已更改而 Git “记住”了旧密码,只需运行此命令,然后重试即可。谢谢 invinciblemuffi。 - tuan.dinh
1
它对于不同的用户登录非常有用。非常感谢! - cyan-kinesin
很高兴一个简单的解决方案能够帮助社区 :) - invinciblemuffi
1
这是在我的Mac上唯一有效的答案。 - user2848810
5
密码重置后,对于Mac系统,运行git config --local credential.helper "osxkeychain"可以重新启用凭据助手,这样Git将不再继续要求输入密码。 - Josiah

34
解决方案如下:
命令git credential-osxkeychain使用了我的钥匙串中的第一个GitHub账户条目,而这个账户并没有访问相关项目的权限。
我通过在Keychain Access中触摸该帐户以更改其日期(我认为只是更改了注释),使其成为最近使用的GitHub账户,从而成为返回到credential-osxkeychain的第一个账户,然后一切正常了。
更好的多个GitHub账户支持形式会更好,但是大多数人可能只有一个主要账户,并且不会遇到此问题。

2
我不确定在同一主机上如何为多个用户工作,但您可以查看ssh并使用'〜/ .ssh / config'文件,而不是使用OSX Keychain。这适用于您可能具有不同主机的多个ssh密钥(以及考虑帐户)。 http://nerderati.com/2011/03/17/simplify-your-life-with-an-ssh-config-file/ - jusopi

10

在 Mac 上,使用命令 git credential-osxkeychain erase

或者手动从 应用程序实用工具钥匙串访问 中删除。然后删除 github.com 钥匙串。然后执行 push 命令;它会要求输入钥匙串密码,请拒绝。

系统会要求输入新的用户名和密码,添加之后再推送文件。

在执行 git push 后,我发现了这个错误。然后我使用了大写字母问题:

remote: Permission to user1/file.git denied to user2(previously exist user ). fatal: unable to access 'https://github.com/xxxxxxxxxxxx/': The requested URL returned error: 403


10

git-credential-osxkeychain会将密码存储在苹果Keychain中,如上所述。

默认情况下,gitcredentials仅考虑域名。如果您想让Git考虑完整路径(例如,如果您有多个GitHub帐户),请将useHttpPath变量设置为true,详见http://git-scm.com/docs/gitcredentials.html。请注意,更改此设置将要求您针对每个URL再次提供凭据。


6

这是与gorjanz上面的评论和链接相同。此外,更改钥匙串中的凭据并不总是可能的,例如,如果您在钥匙串中有多个条目并且不知道哪一个是正确的。在这种情况下,请参阅我在gorjanz帖子下面的评论。 - MDickten

5

该链接仅告诉您如何从应用程序更新凭据。 如果您不想这样做(我不能这样做,因为我的钥匙串中有多个 GitHub 条目,无法确定哪一个是正确的),则可以使用此处的接受答案:https://dev59.com/ocHqa4cB1Zd3GeqP7czn:您可以通过 $ echo url=https://account@github.com | git credential reject (将 account 替换为您的帐户)来使凭据失效。 下次推送时,git 将提示您输入密码并存储它。 - MDickten

4
尝试运行 /Applications/Utilities/Keychain Access

3

@bk2204 answer 只有在终端中才对我有效:

$ echo url=https://github.com | git credential reject


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