git推送总弹密码框是因为未启用凭据缓存且github等平台已停用明文密码;应配置credential.helper(windows用manager-core、macos用osxkeychain、linux用cache或libsecret),改用personal access token替代密码,并清理旧凭据或改用ssh密钥认证。

不是 VSCode 的问题,而是 Git 没配凭据缓存,或用了已失效的认证方式——输密码大概率根本不会成功(GitHub/GitLab/Gitee 自 2021 年起已停用明文密码)。
Git 推送总弹密码框,是因为没启用 credential.helper
VSCode 调用的是系统 Git,它默认不记密码。每次 git push 都走 HTTPS 协议基础认证,就会反复弹窗要你输 username 和 password(或 token)。这不是插件或设置问题,是 Git 凭据机制压根没开。
- Windows 用户执行:
git config --global credential.helper manager-core(推荐,走系统凭据管理器,安全且稳定) - macOS 用户执行:
git config --global credential.helper osxkeychain - Linux 用户可选:
git config --global credential.helper cache(内存缓存,默认 15 分钟)或装libsecret后用gnome-keyring -
别用
store:它把凭据明文写进~/.git-credentials,权限稍错就失效,杀毒软件还可能拦截,共享机器上更危险
输密码老失败?你可能在用过期或错误的 Personal Access Token
GitHub/GitLab/Gitee 已全面停用账号密码登录。你看到的 “Authentication failed” 或 “Support for password authentication was removed” 提示,说明 Git 正在拿一个过期、权限不足、甚至空的 token 在重试——根本不会弹新窗口让你换。
- 去 GitHub → Settings → Developer settings → Personal access tokens → Generate new token,勾选
repo(私有库必需)、workflow等权限 - GitLab 类似:User Settings → Access Tokens → 创建,至少勾选
api和write_repository - 下次弹窗时:
Username填你的账号 ID(不是邮箱),Password粘贴刚生成的 token(ghp_.../glpat-.../gitee_...开头) -
旧凭据必须清干净:Windows 打开「凭据管理器 → Windows 凭据」,删掉所有
git:https://github.com这类条目;macOS 清 Keychain 中对应项
一劳永逸:换 SSH 协议 + 密钥认证
HTTPS + 凭据管理总有缓存冲突、token 过期、平台策略变更等麻烦;SSH 走密钥对,只要私钥在本地、公钥已登到平台,就完全免交互。
- 检查有没有可用密钥:
ls -al ~/.ssh/id_*.pub - 没有就生成(优先 ed25519):
ssh-keygen -t ed25519 -C "your_email@example.com" - 把公钥内容加到 GitHub/GitLab 的 SSH Keys 设置页:
cat ~/.ssh/id_ed25519.pub - 改远程地址:
git remote set-url origin git@github.com:user/repo.git -
注意:公司内网 Git 若没开 22 端口或禁用 SSH,则只能退回 HTTPS +
manager-core或osxkeychain
VSCode 终端和图形界面 Git 操作,凭据不互通
你在 VSCode 内置终端里配置了凭据,不代表图形界面的 Git 操作(比如点击 Push 按钮)会用同一套缓存。尤其 Windows 上,Git Bash、CMD、PowerShell、VSCode 终端可能调用不同凭据后端。
- 统一在 PowerShell 或 CMD 中执行
git config命令(避免 Git Bash 的环境隔离) - 确保 VSCode 使用的是系统 Git:设置里搜
remote.SSH.path留空,或确认git.path指向你配置凭据的那个 Git 安装路径 - 改完配置后,重启 VSCode —— 不只是关终端,整个进程得重载凭据上下文
最常被忽略的点:你以为在输密码,其实 Git 正拿着一个三年前生成、权限只勾了 read:org 的 token 在死循环重试。先清旧凭据,再生成新 token,比反复调 credential.helper 有效得多。











