使用git clone 拉取代码的原理?
简单一句话概括,git clone 的方式就是使用HTTP进行验证,此时我们的git客户端向代码托管平台发送请求,代码托管平台返回响应。
如果我们拉取的代码不是公共代码,代码托管平台第一次返回的响应是需要我们输入用户名和密码。很多人会发现,这个只需要输入一次,后续都不需要输入。到底是因为什么?
毋庸置疑,肯定是git客户端帮我们进行了缓存凭证,后续我们拉取代码的时候,会自动输入凭证。那么这个过程在哪里呢?
问了下ChatGPT,原来,Git有自己的凭证管理器。
查看git凭证管理器
# 使用命令查看所有配置,重点关注credential.helper
git config --list
credential.helper=manager
credential.helper显示的就是凭证管理器,如果是store则是git客户端存储在特定的文件中;如果是manager则是利用操作系统来存储。
具体对比
| 特性 | credential.helper=store | credential.helper=manager |
|---|---|---|
| 存储方式 | 明文文件存储,通常是 ~/.git-credentials | 使用操作系统的安全凭证存储(Windows凭证管理器、macOS钥匙串、libsecret等) |
| 安全性 | 较低,凭证以明文形式存储,存在安全隐患 | 较高,凭证存储在操作系统的安全存储中,不易被明文获取 |
| 跨平台支持 | 支持所有平台,但功能简单 | 跨平台支持良好,提供丰富的功能 |
| 配置和使用 | 简单,适合快速测试和个人项目 | 配置略复杂,但提供更强大的功能和更高的安全性 |
| 高级功能 | 无高级功能 | 提供多因素认证、自动凭证刷新等高级功能 |
选择哪一个?
- 如果你需要快速设置,并且环境安全性不是主要考虑因素,
credential.helper=store可能是一个简单有效的选择。 - 如果你需要更高的安全性,或者在跨平台环境中工作,
credential.helper=manager是一个更好的选择,因为它利用操作系统的安全机制来保护你的凭证。
查看凭证
manager