git clone 的秘密

262 阅读2分钟

使用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=storecredential.helper=manager
存储方式明文文件存储,通常是 ~/.git-credentials使用操作系统的安全凭证存储(Windows凭证管理器、macOS钥匙串、libsecret等)
安全性较低,凭证以明文形式存储,存在安全隐患较高,凭证存储在操作系统的安全存储中,不易被明文获取
跨平台支持支持所有平台,但功能简单跨平台支持良好,提供丰富的功能
配置和使用简单,适合快速测试和个人项目配置略复杂,但提供更强大的功能和更高的安全性
高级功能无高级功能提供多因素认证、自动凭证刷新等高级功能

选择哪一个?

  • 如果你需要快速设置,并且环境安全性不是主要考虑因素,credential.helper=store 可能是一个简单有效的选择。
  • 如果你需要更高的安全性,或者在跨平台环境中工作,credential.helper=manager 是一个更好的选择,因为它利用操作系统的安全机制来保护你的凭证。

查看凭证

manager

image.png