本文讨论尝试执行 Git 克隆或 Git 推送函数到 Azure DevOps 存储库时可能出现的问题。
适用于: Azure DevOps Services、Azure DevOps Server
执行 Git 克隆或 Git 推送到 Azure DevOps 存储库时出现的问题
尝试在 GitHub 中克隆或推送存储库时,代理配置、SSL 证书或凭据缓存的一些问题可能会导致 Git 克隆操作失败。
故障排除清单
若要确定问题的原因,请执行以下步骤:
启用详细跟踪,为正在运行的 Git 命令设置详细跟踪级别。
按顺序设置以下变量,并为每个集变量运行 Git 命令以获取有关错误的详细信息。
GIT_TRACE=1GIT_TRACE_PACKET=1GIT_TRACE_CURL_NO_DATA=1GIT_CURL_VERBOSE=1
这些变量的跟踪集级别提供了与以下示例类似的有关导致问题的错误的详细信息:
若要了解有关 Git 环境变量的详细信息,请参阅 Git 内部 - 环境变量。
原因 1:Git 无法通过代理服务器进行连接
如果使用代理服务器,但 Git 配置未设置为通过代理服务器进行连接,则可能会看到 407 或 502 错误消息。 如果无法通过代理服务器建立连接,并且你看到类似于“无法访问 <your github url>:”或“无法解析主机 github.com”的错误,则也会出现此问题。
解决方案:将 Git 配置为使用代理服务器
运行 git config --list 以获取系统上所有 Git 配置的列表,并检查代理服务器是否正在使用。
如果看到多个配置文件(如存储库或系统根目录),请运行 git config --list --show-origin 该命令,然后查看 Git 从中检索配置信息的路径。
如果未在配置列表中找到代理服务器,请 git config --global 运行以下命令以在配置中设置代理服务器。
例如,http.proxy http://proxyUsername:proxyPassword@proxy.server.com:port。
若要对某些 URL 使用特定代理,请在 Git 配置子节中配置代理 URL,类似于 http.<url\>.key notation: 以下示例:
git config --global
http.https://domain.com.proxy http://proxyUsername:proxyPassword@proxy.server.com:port
如果代理使用 https,请使用上述示例中的代理 URL 设置 Git 配置 https 。 否则,请保留 http。
有关 Git 配置的详细信息,请参阅 Git 配置文档。
原因 2:Git 使用本地自签名证书
如果 Git 使用的是本地自签名证书,则你可能会看到错误“SSL 证书问题:无法获取本地颁发者证书”。
解决方案 1:禁用 TLS/SSL 验证
如果已安装本地 Team Foundation Server (TFS),并且想要禁用 Git 执行的 TLS/SSL 验证,请运行以下命令:
git config --global http.sslVerify false
解决方案 2:在 Git 中配置自签名证书
若要继续 Git 执行的 TLS/SSL 验证,请执行以下步骤,在本地 Git 中添加根证书:
将根证书导出为 Base-64 编码的 X.509(。CER) 文件,请执行以下步骤:
打开 Microsoft Edge 浏览器,并在地址栏中输入 TFS 服务器的 URL,例如
https://<servername>/tfs。在地址栏上,选择
图标,然后选择 连接是安全 链接。选择
图标以打开 “认证 ”窗口。在 “认证路径 ”选项卡中,选择左上角的证书,即根证书。
选择“ 查看证书 ”以打开 根证书的“证书 ”窗口。
在 “详细信息 ”选项卡上,选择“ 复制到文件...” 。
在“证书导出向导”上,选择“下一步”,然后选择“Base-64 编码的 X.509”()。要导出的 CER) 文件格式。
将根证书保存在本地磁盘上。
按照以下步骤将 Git 配置为使用 Git 证书存储的本地目录:
转到本地磁盘上的 C:\Program Files\Git\bin 路径,然后创建 curl-ca-bundle.crt 文件的副本。
注意
- 在设备上安装 Git for Windows(
msysgit)时, curl-ca-bundle.crt 文件将存储在 Program Files 目录中。 此文件是包含 Git 信任的所有证书的git.exe的根证书存储。 - curl-ca-bundle.crt 文件(基于每个设备存储)是本地 Windows 客户端的专用文件。 文本文件具有 UNIX (
\n) 行结束符。 - 在 Git for Windows 2.x 系列中,路径将更改为 C:\Program Files (x86)\Git\mingw32\ssl\certs\ca-bundle.crt 或 C:\Program Files\Git\mingw64\ssl\certs\ca-bundle.crt。 如果使用 32 位 Windows 客户端,可以修复文件夹路径,以便程序文件部件不会出现 x86。
- 在设备上安装 Git for Windows(
将 curl-ca-bundle.crt 文件复制到用户配置文件目录(C:\Users\<yourname>)。 或者运行类似于示例的
copy "C:\Program Files (x86)\Git\bin\curl-ca-bundle.crt" C:\Users\<yourname>复制命令。运行以下命令,将 Git 配置为使用 Windows 客户端中的证书存储的本地副本:
git config --global http.sslCAInfo C:/Users/<yourname>/curl-ca-bundle.crt
按照以下步骤将导出的根证书添加到 Git 证书存储的本地副本:
在记事本中打开导出的根证书,然后将整个内容复制到剪贴板。
通过在文本编辑器中转到 C:/Users/yourname>/<curl-ca-bundle.crt 路径,打开 curl-ca-bundle.crt 文件。
提示
可以使用 unix2dos 工具将文件中的行结束符从 \n 更改为 \r\n,并且能够在记事本中打开该文件。
在末尾添加根证书的条目,然后将证书内容粘贴到 curl-ca-bundle.crt 文件中。
保存 curl-ca-bundle.crt 文件。
执行克隆操作以验证 SSL 错误是否已解决。
原因 3:身份验证错误或凭据缓存问题
如果帐户名称或域密码已更改,或者你收到身份验证错误,则可能存在身份验证和凭据缓存问题。
解决方案:重置 Git 凭据管理器(GCM)
若要解决身份验证错误或凭据缓存问题,请首先按照 故障排除清单 获取错误信息,然后执行以下步骤:
git config --list运行命令,然后检查是否使用的是 Git 凭据管理器(GCM)。 如果设置为credential.helper管理器,则 GCM 正在使用中。- 按照以下步骤重置 GCM:
git config --global --unset credential.helper运行命令以取消设置 GCM。git config credential.helper manager运行命令以将 GCM 设置回来。 或者,请按照以下步骤先删除凭据缓存:- 取消设置时,在 Windows 搜索中搜索凭据管理器,选择“打开”,然后删除 Git 存储库的任何凭据。
- 转到 %localappdata%/GitCredentialManager 路径,然后删除 tenant.cache 文件。
- 通过运行
git config credential.helper manager命令来设置 GCM。
- 执行克隆操作以验证问题是否已解决。
注意: 根据适用于 Windows 的 Git 版本, credential.helper 该值会有所不同。 有关详细信息,请参阅下表:
| 适用于 Windows 的 Git 版本 | 适用于 Windows 的 Git 凭据管理器 | Git Credential Manager Core | Git 凭据管理器(已从 GCM 核心重命名) |
|---|---|---|---|
| 2.27 及更早版本 | manager |
||
| 2.28 到 2.33.0 | manager(可选) |
manager-core(可选) |
|
| 2.33.1 到 2.34.0 | manager-core |
||
| 2.34.1 到 2.38 | manager-core |
||
| 2.39 及更高版本 | manager |