Mac 一直弹出 git credential osxkeychain 的解决
macOS 上的 git 默认用 osxkeychain 这个凭据助手把 HTTPS 远程的账号密码存进系统钥匙串,第一次输入之后就不用再输。方便的前提是存进去的那份是对的;一旦钥匙串里缓存了一份过期或错误的凭据,git 每次都拿它去认证、每次都被服务端拒绝,于是就变成反复弹窗,而且我们手输正确密码也没用——因为弹窗提交的内容会再次和缓存里的冲突,或者压根没被采用。
最典型的触发原因是 GitHub 早就取消了 HTTPS 的账号密码认证,只接受 personal access token。我们钥匙串里存的还是几年前那个登录密码,服务端一律返回认证失败。所以修复思路是先清掉旧凭据,再用正确的 token 重新存一份;实在不想折腾就把这个助手关掉。
场景
不知道什么原因,拉取代码时一直弹出 git credential osxkeychain,并且输入的密码即使是对的也没有用
解决方法一
清空钥匙串里那条过期记录,让 git 下次拉取时重新走一遍完整的认证流程。
- 打开
Finder/Applications在搜索栏输入Keychain Access,选择在Application中搜索

这张图演示的是入口位置。搜索框旁边要把范围切成在"应用程序"里搜,否则默认范围搜不到这个系统自带工具。中文系统下它叫「钥匙串访问」,用 Spotlight(Command + 空格)敲这四个字更快。
- 打开钥匙串
- 删除
github.com或者gitee.com

这张图要看的是列表里那条名称为 github.com、种类是"互联网密码"的记录,它就是 osxkeychain 存进去的那份凭据。右键选删除即可。如果同一个域名出现多条(换过账号的话很常见),全部删掉,留一条错的就还会继续弹。
删除是不可恢复的,而且钥匙串里同时也存着浏览器保存的网站密码、Wi-Fi 密码等等,所以务必只删和 github.com / gitee.com 精确匹配的那几条,别按域名模糊搜出来一批直接全选删。删之前确认自己手上有可用的 token 或密码,否则删完就登不上了。
- 再次拉取代码,重新输入账号密码
这里的"密码"对 GitHub 来说要填 personal access token,不是登录网站用的那个密码。token 在 GitHub 的 Settings → Developer settings → Personal access tokens 里生成,勾上 repo 权限。用户名照常填自己的账号名。
解决方法二
如果方法一清完之后还在弹,说明凭据助手本身的配置有问题——比如同一个 credential.helper 在多个配置文件里被设置了多次,git 会依次尝试每一个,其中某一个一直返回错误结果。这时得先搞清楚这个配置到底是从哪个文件来的。
git config --get-all --show-origin credential.helper
--get-all 会列出所有层级的取值而不是只显示最终生效的那一个,--show-origin 在每行前面标出该值来自哪个文件。两个参数配合起来才能定位问题。

这张图要看的是每行冒号前面那段 file:/xxx/gitconfig 的路径,它告诉我们这条配置写在哪。常见的几个位置:/usr/local/etc/gitconfig 或 /opt/homebrew/etc/gitconfig 是 Homebrew 装的 git 的系统级配置(Apple Silicon 机器在后者),/Users/<你>/.gitconfig 是我们自己的全局配置,仓库内的 .git/config 是仓库级。如果输出里 osxkeychain 出现了多次,就是它们在打架。
vi /usr/local/etc/gitconfig
路径要按上一步实际输出的来,别照抄。这个文件属于系统级配置,vi 打开时可能需要 sudo 才有写权限。改之前先备份一份:sudo cp /usr/local/etc/gitconfig /usr/local/etc/gitconfig.bak。
注释掉这一行 credential.helper=osxkeychain
git 配置文件用 # 或 ; 开头表示注释。注释掉之后 git 不再使用任何凭据助手,代价是每次拉取推送都要重新输入用户名和 token,所以这更像是一个排查手段或临时方案。
不想手动编辑文件的话,用命令达到同样效果更安全,能避免改坏语法:
# 只取消全局那一层
git config --global --unset-all credential.helper
# 取消系统级那一层(需要写权限)
sudo git config --system --unset-all credential.helper
更推荐的做法
把 osxkeychain 留着,只是让它存一份正确的凭据。这样既不用反复输 token,也没有弹窗。最简单的方式是直接往钥匙串里写:
git credential-osxkeychain store
回车后按提示逐行输入,输完再敲一个空行结束:
protocol=https
host=github.com
username=你的用户名
password=你的personal_access_token
写完用一次 git fetch 验证不再弹窗即可。另一个思路是干脆不用 HTTPS,把远程换成 SSH,认证靠密钥,钥匙串这条路完全绕开:
git remote set-url origin git@github.com:user/repo.git
改完 git remote -v 确认一下。SSH 和 HTTPS 拉到的代码与历史完全一致,随时能再切回来。

还没有留言,来发表第一条吧~