likes
comments
collection
share

Git 凭证存储

作者站长头像
站长
· 阅读数 4

如果你使用的是 SSH 方式连接远端,并且设置了一个没有口令的密钥,这样就可以在不输入用户名和密码的情况下安全地传输数据。 然而,这对 HTTP 协议来说是不可能的 —— 每一个连接都是需要用户名和密码的。 这在使用双重认证的情况下会更麻烦,因为你需要输入一个随机生成并且毫无规律的 token 作为密码。

幸运的是,Git 拥有一个凭证系统来处理这个事情。

凭据的存储方式

凭据:以下都表示 Git 账户记录(用户名密码信息)

在 Git 中,有以下几种方式来存储凭据信息:

模式说明
默认不缓存每一次连接都会询问你的用户名和密码
cache会将凭证存放在内存中一段时间。 密码永远不会被存储在磁盘中,并且在15分钟后从内存中清除
store会将凭证用明文的形式存放在磁盘中,并且永不过期。 这意味着除非你修改了你在 Git 服务器上的密码,否则你永远不需要再次输入你的凭证信息。 这种方式的缺点是你的密码是用明文的方式存放在你的 home(用户目录) 目录下
osxkeychainmacOS 中安装的 Git 一般默认都是该模式,它会将凭证缓存到你系统用户的钥匙串中。 这种方式将凭证存放在磁盘中,并且永不过期,但是是被加密的,这种加密方式与存放 HTTPS 凭证以及 Safari 的自动填写是相同的
managerWindows 中安装的 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 凭据的默认存储方式,这里说明如何手动清除该模式存储的账户记录。

Git 凭证存储

在任务栏上的搜索框中键入“凭据管理器”,然后选择“凭据管理器控制面板”

Git 凭证存储

切换到 Windows 凭据 找到自己的远程仓库托管网站的账户记录,例如矩形红框中是我输入过的 Gitee 和 GitHub 的账号记录

Git 凭证存储

点击对应的账户记录展开详细信息,在详细信息中点击删除

Git 凭证存储

选择是即可

Git 凭证存储

删除完毕,可以看到刚才的那条 Gitee 的记录已经没有了

最后重新推送代码,可以看到又可以继续输入用户名和密码了。

Git 凭证存储

清除 osxkeychain 模式下的账户记录

osxkeychain 模式一般是 macOS 中 Git 默认的存储模式。

Git 凭证存储

找到并打开系统应用:钥匙串访问

Git 凭证存储

在该应用的右上角搜索查找对应的网站记录,例如我这里查找 gitee.com 的网站账户信息记录

Git 凭证存储

在对应的账户记录上右键选择删除即可

之后重新推送代码,就会提示你重新输入该远程网站的用户名密码了。

清除 store 模式下的账户记录

Windows 用户:

Git 凭证存储

打开运行(快捷键 Win + R),输入 %HOMEDRIVE%%HOMEPATH% 回车确定

Git 凭证存储

找到目录中的 .git-credentials 并将其删除

macOS 用户:

sudo rm ~/.git-credentials

Linux 用户:

sudo rm ~/.git-credentials

参考链接