Git 凭证存储
如果你使用的是 SSH 方式连接远端,并且设置了一个没有口令的密钥,这样就可以在不输入用户名和密码的情况下安全地传输数据。 然而,这对 HTTP 协议来说是不可能的 —— 每一个连接都是需要用户名和密码的。 这在使用双重认证的情况下会更麻烦,因为你需要输入一个随机生成并且毫无规律的 token 作为密码。
幸运的是,Git 拥有一个凭证系统来处理这个事情。
凭据的存储方式
凭据:以下都表示 Git 账户记录(用户名密码信息)
在 Git 中,有以下几种方式来存储凭据信息:
模式 | 说明 |
---|---|
默认不缓存 | 每一次连接都会询问你的用户名和密码 |
cache | 会将凭证存放在内存中一段时间。 密码永远不会被存储在磁盘中,并且在15分钟后从内存中清除 |
store | 会将凭证用明文的形式存放在磁盘中,并且永不过期。 这意味着除非你修改了你在 Git 服务器上的密码,否则你永远不需要再次输入你的凭证信息。 这种方式的缺点是你的密码是用明文的方式存放在你的 home(用户目录) 目录下 |
osxkeychain | macOS 中安装的 Git 一般默认都是该模式,它会将凭证缓存到你系统用户的钥匙串中。 这种方式将凭证存放在磁盘中,并且永不过期,但是是被加密的,这种加密方式与存放 HTTPS 凭证以及 Safari 的自动填写是相同的 |
manager | Windows 中安装的 Git 一般默认都是该模式,它会将凭证缓存在系统的凭据管理器中。这种方式将凭证存放在磁盘中,并且永不过期,同样也是加密的 |
通过下面的命令,我们可以查看自己机器上的 Git 使用的是哪种凭据存储模式:
git config credential.helper
如果需要修改 Git 的凭据存储模式,可以使用:
git config --global credential.helper 凭据模式
# 例如
git config --global credential.helper store
使用下面的命令可以取设置缓存模式:
# 如果你配置到了系统级别则指定 --system
# 注意:执行该命令需要管理员权限
# macOS 或者 Linux 在前面加上 sudo 命令;
# Windows 以管理员身份运行命令行窗口执行该命令
git config --system --unset credential.helper
# 如果你配置到了用户级别则指定 --global
git config --global --unset credential.helper
# 如果你不确定你是系统级还是用户级别配置,那就把两条命令都执行一下
清除账户记录
有时候在推送代码的时候会看到下面的错误信息:
在执行 git push
的时候有时候会遇到这样的错误
$ git push
remote: Incorrect username or password ( access token )
fatal: Authentication failed for 'https://gitee.com/lipengzhou/hello.git/'
翻译过来意思就是说:远程用户名或密码错误。
遇到该错误可能涉及到以下几种原因:
- 你输入了错误的用户名或密码
- 远程仓库托管网站的账户信息发生了变更,而本地记录的还是旧的账户信息
提示:在 Windows 上的 manager 存储模式下哪怕账户信息输错了也会记住那个输错的账户信息,不给你重新输入的机会,一个天坑!!!
解决该问题也很简单,只需要清除本地的 Git 账户记录即可。这样执行 git push
的时候才能重新提示你输入用户名密码。
下面针对不同的存储模式如何清除对应的账户记录逐一介绍。
清除 manager 模式下的账户记录
manager 模式一般是 Windows 系统中 Git 凭据的默认存储方式,这里说明如何手动清除该模式存储的账户记录。
在任务栏上的搜索框中键入“凭据管理器”,然后选择“凭据管理器控制面板”
切换到 Windows 凭据 找到自己的远程仓库托管网站的账户记录,例如矩形红框中是我输入过的 Gitee 和 GitHub 的账号记录
点击对应的账户记录展开详细信息,在详细信息中点击删除
选择是即可
删除完毕,可以看到刚才的那条 Gitee 的记录已经没有了
最后重新推送代码,可以看到又可以继续输入用户名和密码了。
清除 osxkeychain 模式下的账户记录
osxkeychain 模式一般是 macOS 中 Git 默认的存储模式。
找到并打开系统应用:钥匙串访问
在该应用的右上角搜索查找对应的网站记录,例如我这里查找
gitee.com
的网站账户信息记录
在对应的账户记录上右键选择删除即可
之后重新推送代码,就会提示你重新输入该远程网站的用户名密码了。
清除 store 模式下的账户记录
Windows 用户:
打开运行(快捷键
Win + R
),输入%HOMEDRIVE%%HOMEPATH%
回车确定
找到目录中的
.git-credentials
并将其删除
macOS 用户:
sudo rm ~/.git-credentials
Linux 用户:
sudo rm ~/.git-credentials
参考链接
转载自:https://juejin.cn/post/7042603531760566302