跳到正文

天行健,君子以自强不息

Git 凭证免密配置:.git-credentials 一次搞定,告别反复输入 Token

2k 7 分钟

📌 前言

最近公司内网搭了一个 Gitea 仓库,团队的代码协作都靠它。作为一个典型的「i 人」,当我发现用 SSH 方式克隆仓库需要管理员审批密钥时,内心是抗拒的——为了克隆一个仓库还要专门去麻烦别人,想想就社恐发作。于是果断选择了 HTTP 方式。

但 HTTP 方式默认只能读不能写,想推送代码,还得再去申请一个访问令牌(Token)。本以为申请完就一劳永逸了,真正用起来才发现另一个坑:每克隆一个新仓库,都得在 URL 里手动带上用户名和 Token,长这样:

1
git clone http://用户名:token@gitea.example.com:3000/团队/项目.git

这一长串又难记又难输,复制粘贴时还要担心记错,而且 Token 直接暴露在命令行里也有安全隐患。实在忍不了,我开始研究 Git 官方的凭证机制,最终找到了一个一劳永逸的配置方案——配置一次,从此 clone / push / pull 全程免输


🎯 问题背景

复盘一下,整个痛点链条其实是这样形成的:

  1. SSH 门槛高:公司内网 Gitea 的 SSH 方式需要管理员审核密钥,社恐不友好,果断放弃
  2. HTTP 匿名受限:HTTP 方式匿名访问只能拉取,无法推送代码
  3. 申请 Token:为了能推送,去申请了个人访问令牌
  4. 每次都要手动输入:克隆新仓库时,必须把「用户名 + Token」拼进 URL,繁琐且容易出错

除了麻烦,还有两个隐患:

  • 安全风险:Token 明文出现在命令历史里,别人翻一下历史记录就能看到
  • 不优雅git clone 这种最基础的操作,居然还要带一长串认证信息,看着就难受

所以问题很明确:能不能在本地配置一次,让 Git 自动完成认证,以后再也不需要手动输入?

答案就在 Git 自带的凭证机制里。


💡 认识 Git 凭证机制

Git 通过 凭证助手(credential helper) 来统一管理远程仓库的账号密码 / 访问令牌。当 Git 需要认证时,会询问已配置的凭证助手;拿到凭证后,也可以交给它保存,下次直接复用。

常见的凭证方式有三种:

方式 存储位置 有效期 安全性 适用场景
cache 内存 默认 15 分钟 高(不落盘) 临时使用、共用电脑
store 明文文件 .git-credentials 永久 低(明文存储) 个人电脑、追求省心
manager 系统凭据管理器(Windows 凭据管理器 / macOS 钥匙串) 永久 高(系统级加密) 大多数场景,最推荐

⚠️ 注意:三种方式选一个即可,不要同时开启。多个凭证助手并存时,Git 的存取行为会变得不可控,容易出现凭证互相覆盖、哪个都不生效的怪问题。

💡 心得:我最终选择了 store,理由很简单——自己的电脑,图个省心。明文存储的风险在个人电脑上完全可接受,换来的是「永不输入」的极致体验。如果你比较在意安全,或者电脑会和别人共用,直接用系统默认的 manager 就好,Windows 下它会自动把凭证存进系统凭据管理器,同样免输。

这里还有一个小知识点:如果你把用户名和 Token 直接写进 clone URL,Git 会直接使用 URL 里的凭证,根本不会触发凭证助手去保存。这也是为什么很多人配了凭证机制却总觉得没生效——因为他们习惯在 URL 里带 Token。


⚙️ 实战配置:store 明文方案

第一步:启用 store 凭证助手

打开命令行(PowerShell 或 CMD),执行:

1
git config --global credential.helper store

⚠️ 这一步必须执行一次! 它会往 ~/.gitconfig 里写入一行配置,告诉 Git「去读取 .git-credentials 文件」。如果你跳过这步、直接手动创建文件,那个文件就是「死」的,Git 根本不会去读。

验证是否配置成功:

1
2
git config --global --get credential.helper
# 输出 store 即表示配置成功

第二步:编写 .git-credentials 文件

凭证文件的路径在用户主目录下:

1
C:\Users\你的用户名\.git-credentials

如果文件不存在,手动创建一个即可。每一行对应一条凭证,格式为:

1
http://用户名:token@主机[:端口]

例如:

1
2
http://snail:ghp_xxxxx123456@gitea.example.com:3000
https://snail:ghp_xxxxx123456@github.com

几个要点:

  • 一行一条,以后要接入别的服务器(比如 GitHub),直接换行加一条新记录
  • 端口可以省略,默认端口(HTTP 80 / HTTPS 443)不需要写
  • 如果用户名或 Token 里包含 @:/ 等特殊字符,需要做 URL 编码(例如 @ 写作 %40

第三步:验证配置

克隆一个仓库试试(这次 URL 里不再需要带凭证):

1
git clone http://gitea.example.com:3000/团队/项目.git

正常情况下会直接成功,全程不提示输入用户名和密码。再随便 git push 一次,同样免密。

💡 心得:配置完成后,命令行的克隆命令终于回归清爽——不用再拼那一长串用户名和 Token,也告别了从密码管理器里反复翻找的尴尬。多配置几个服务器之后,体验更是质的飞跃。


🔐 安全注意事项

  • .git-credentials明文文件,等于把 Token 直接写在硬盘上。务必保管好,不要随意分享、截图或上传到任何地方
  • 不要把文件内容粘贴进代码仓库(比如作为配置示例提交上去),那样等于公开泄露凭证
  • 电脑多人共用的话,建议改用 cachemanager,不要用 store
  • 之前带 Token 的 clone 命令可能已经留在命令历史里,建议顺手清理一下。PowerShell 历史文件位于:
    1
    %APPDATA%\Microsoft\Windows\PowerShell\PSReadLine\ConsoleHost_history.txt

🗑️ 删除凭证 / 切换方案

  • 删除某一条凭证:编辑 .git-credentials,删掉对应那一行即可
  • 全部清除:直接删除整个文件(或清空内容)
  • 停用 storegit config --global --unset credential.helper
  • 切回 managergit config --global credential.helper manager(这也是 Git for Windows 的默认值)

❓ 常见问题

Q1:配置了还是提示输入密码?

按下面顺序排查:

  1. 确认执行过 git config --global credential.helper store
  2. 确认文件路径正确:C:\Users\<你的用户名>\.git-credentials,注意前面有个点
  3. 确认文件里凭证的主机、端口、Token 与仓库地址完全一致(包括协议是 http 还是 https、大小写)
  4. 确认没有同时开启多个凭证助手,只保留一个

Q2:store 和 manager 可以同时开吗?

不建议。多个凭证助手并存时,Git 的存取行为不可控,容易出现互相覆盖、都不生效的问题。选一个就好。

Q3:Token 泄露了怎么办?

立即去 Gitea / GitHub 后台吊销(Revoke)该 Token,重新生成一个,再更新 .git-credentials 里的对应行。

Q4:URL 里带 Token 克隆时,为什么配置了 store 还是没用?

因为 URL 中已经包含认证信息时,Git 会直接使用它,不会调用凭证助手保存。所以一定要用不带凭证的干净 URL 去 clone / push,让 Git 走凭证机制。

Q5:换了一台电脑怎么办?

每台电脑都需要重复一遍上面的配置流程。另外注意:不要把 .git-credentials 通过网盘或同步工具到处同步,明文 Token 传播范围越大,风险越高。


📝 总结

整个配置过程其实只有三步:

步骤 操作
① 启用凭证助手 git config --global credential.helper store
② 写入凭证 .git-credentials 中按 http://用户名:token@主机[:端口] 格式添加一行
③ 验证 重新 clone 一个仓库,确认不再提示输入

配置完成后,git clonegit pushgit pull 全部免密执行。虽然过程中踩了不少坑(SSH 审批、Token 申请、反复输入……),但最终这套方案让内网 Git 协作变得无比顺滑。

如果你也和我一样,被内网仓库的凭证输入折磨过,不妨试试这套配置。


🔗 相关链接


📢 如果本文对你有帮助,欢迎点赞收藏!如有问题欢迎在评论区留言讨论。