本文讨论尝试对 Azure DevOps 存储库执行 Git 克隆或 Git 推送函数时可能发生的问题。

适用范围: Azure DevOps Services、Azure DevOps Server

执行 Git 克隆或 Git 推送到 Azure DevOps 存储库时出现的问题

尝试克隆或推送 GitHub 中的存储库时,代理配置、SSL 证书或凭据缓存的一些问题可能会导致 Git 克隆操作失败。

故障排除清单

若要确定问题的原因,请执行以下步骤:

  • 启用 详细跟踪 ,为正在运行的 Git 命令设置详细跟踪级别。

  • 按顺序设置以下变量,并为每个集变量运行 Git 命令以获取有关错误的详细信息。

  • GIT_TRACE=1
  • GIT_TRACE_PACKET=1
  • GIT_TRACE_CURL_NO_DATA=1
  • GIT_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 配置子部分中 http.<url\>.key notation: 配置代理 URL,类似于以下示例:

    git config --global http.https://domain.com.proxy http://proxyUsername:proxyPassword@proxy.server.com:port

    如果代理使用 https ,请在上面的示例中使用 https 代理 URL 设置 Git 配置。 否则,请保留 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 ) 行尾。
  • 在适用于 Windows 2.x 的 Git 系列中,路径将更改为 C:\Program Files (x86) \Git\mingw32\ssl\certs\ca-bundle.crt C:\Program Files\Git\mingw64\ssl\certs\ca-bundle.crt 。 如果使用的是 32 位 Windows 客户端,则可以修复文件夹路径,以便“程序文件”部分不会随 x86 一 起显示。
  • curl-ca-bundle.crt 文件复制到用户配置文件目录, ( C:\Users\<yourname> ) 。 或者运行类似于示例的 copy "C:\Program Files (x86)\Git\bin\curl-ca-bundle.crt" C:\Users\<yourname> copy 命令。

  • 运行以下命令,将 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 错误是否已解决。

    如果帐户名称或域密码已更改,或者你收到身份验证错误,则可能存在身份验证和凭据缓存问题。

    解决方案: (GCM) 重置 Git 凭据管理器

    若要解决身份验证错误或凭据缓存问题,请首先按照 故障排除清单 获取错误信息,然后按照以下步骤操作:

  • git config --list 如果使用的是 Git 凭据管理器 (GCM) ,请运行 命令,然后检查。 credential.helper 如果 设置为 manager,则 GCM 正在使用中。
  • 按照以下步骤重置 GCM:
    1. 运行 git config --global --unset credential.helper 命令以取消设置 GCM。
    2. 运行 git config credential.helper manager 命令以重新设置 GCM。 或者,请按照以下步骤先删除凭据缓存:
      1. 取消设置后,在 Windows 搜索中搜索 凭据管理器 ,选择“ 打开 ”,然后删除 Git 存储库的任何凭据。
      2. 转到 %localappdata%/GitCredentialManager 路径,然后删除 tenant.cache 文件。
      3. 通过运行 git config credential.helper manager 命令重新设置 GCM。
  •