針對 Git 複製或推送失敗至 Azure DevOps 存放庫時的問題進行疑難解答

本文討論當您嘗試執行 Git 複製或 Git 推送函式至 Azure DevOps 存放庫時可能發生的問題。

適用於: Azure DevOps Services、Azure DevOps Server

執行 Git 複製或 Git 推送至 Azure DevOps 存放庫時發生問題

當您嘗試在 GitHub 中複製或推送存放庫時,Proxy 設定、SSL 憑證或認證快取的一些問題可能會導致 Git 複製作業失敗。

疑難排解檢查清單

若要識別問題的原因,請遵循下列步驟:

  1. 啟用詳細資訊追蹤,以設定您所執行 Git 命令的詳細資訊追蹤層級。

  2. 依序設定下列變數,並針對每個集合變數執行 Git 命令,以取得錯誤的詳細資訊。

    • GIT_TRACE=1
    • GIT_TRACE_PACKET=1
    • GIT_TRACE_CURL_NO_DATA=1
    • GIT_CURL_VERBOSE=1

這些變數的追蹤集合層級提供與下列範例類似的詳細資訊,說明造成問題的錯誤:

Git 複製錯誤資訊,方法是以詳細資訊模式執行命令。

若要深入瞭解 Git 環境變數,請參閱 Git 內部 - 環境變數

原因 1:Git 無法透過 Proxy 伺服器連線

如果您使用 Proxy 伺服器,但 Git 組態未設定為透過 Proxy 伺服器連線,您可能會看到 407 或 502 錯誤訊息。 無法透過 Proxy 伺服器建立連線時也會發生此問題,而且您會看到類似「無法存取 <your github url>:」或「無法解析主機 github.com」的錯誤。

解決方案:設定 Git 以使用 Proxy 伺服器

執行 git config --list 以取得系統上所有 Git 組態的清單,並檢查 Proxy 伺服器是否正在使用中。

如果您看到多個組態檔,例如存放庫或系統根目錄,請執行 git config --list --show-origin 命令,然後查看 Git 擷取組態信息的路徑。

如果您在組態清單中找不到 Proxy 伺服器,請執行 git config --global 命令以在組態中設定 Proxy 伺服器。

例如: http.proxy http://proxyUsername:proxyPassword@proxy.server.com:port

若要針對某些 URL 使用特定的 Proxy,請在 Git config 子區段中設定 Proxy URL,類似 http.<url\>.key notation: 下列範例:

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

如果 Proxy 使用 https,請使用上述範例中的 Proxy 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 中新增跟證書:

  1. 將跟證書導出為Base-64編碼的 X.509 (。CER) 檔案,請遵循下列步驟:

    1. 開啟 Microsoft Edge 瀏覽器,然後在網址列中輸入 TFS 伺服器的 URL, 例如 https://<servername>/tfs

    2. 在網址列上 ,選取圖示,然後選取 [ 連線是安全的 ] 連結。

    3. 選取圖示以開啟 [認證] 視窗。

    4. 在 [ 認證路徑] 索引標籤中,選取左上方的憑證,也就是跟證書。

      在 [認證] 視窗中選取 [認證路徑] 索引標籤。

    5. 選取 [檢視憑證 ] 以開啟 跟證書的 [憑證 ] 視窗。

    6. 在 [詳細數據] 索引標籤上,選取 [複製到檔案...]。

      在 [認證] 視窗中選取 [詳細數據] 索引標籤。

    7. 在 [ 憑證導出精靈] 上,選取 [下一步],然後選取 [Base-64 編碼 X.509]。要匯出的 CER) 檔案格式。

      在 [憑證導出精靈] 上選取檔格式。

    8. 將跟證書儲存在本機磁碟上。

  2. 依照下列步驟,將 Git 設定為使用 Git 憑證存放區的本機目錄:

    1. 移至本機磁碟上的 C:\Program Files\Git\bin 路徑,然後製作 curl-ca-bundle.crt 檔案的復本。

      注意

      • 當您在裝置上安裝 Git for Windows (msysgit) 時, curl-ca-bundle.crt 檔案會儲存在您的 Program Files 目錄中。 此檔案是git.exe的跟證書存儲,其中包含 Git 信任的所有憑證。
      • curl-ca-bundle.crt 檔案會以個別裝置為基礎儲存,是本機 Windows 用戶端的私人檔案。 文字檔有 UNIX (\n) 行尾。
      • 在 Windows 2.x 系列的 Git 中,路徑會變更為 C:\Program Files (x86)\Git\mingw32\ssl\certs\ca-bundle.crtC:\Program Files\Git\mingw64\ssl\certs\ca-bundle.crt。 如果您使用 32 位 Windows 用戶端,您可以修正資料夾路徑,讓 Program Files 元件不會出現 x86
    2. curl-ca-bundle.crt 檔案複製到您的使用者配置文件目錄 (C:\Users\<yourname>)。 或執行類似範例的 copy "C:\Program Files (x86)\Git\bin\curl-ca-bundle.crt" C:\Users\<yourname> 複製命令。

    3. 執行下列命令來設定 Git,以從 Windows 用戶端使用憑證儲存的本機複本:

      git config --global http.sslCAInfo C:/Users/<yourname>/curl-ca-bundle.crt

  3. 遵循下列步驟,將導出的跟證書新增至 Git 證書儲存的本機複本:

    1. 在記事本中開啟導出的跟證書,然後將整個內容複製到剪貼簿。

    2. 移至文本編輯器中的 C:/Users/<yourname>/curl-ca-bundle.crt 路徑,開啟 curl-ca-bundle.crt 檔案

      提示

      您可以使用 unix2dos 工具,將檔案中的行尾端從 \n 變更為 \r\n ,並且能夠在記事本中開啟檔案。

    3. 在結尾新增跟證書的項目,然後將憑證內容貼到 curl-ca-bundle.crt 檔案中。

    4. 儲存 curl-ca-bundle.crt 檔案。

    5. 執行複製作業,以確認 SSL 錯誤是否已解決。

原因 3:驗證錯誤或認證快取問題

如果變更過帳戶名稱或網域密碼,或是您碰到驗證錯誤的情況,可能就有驗證和認證快取的問題。

解決方案:重設 Git 認證管理員 (GCM)

若要解決驗證錯誤或認證快取問題,請從遵循 疑難解答檢查清單 開始取得錯誤資訊,然後遵循下列步驟:

  1. git config --list執行 命令,然後檢查您是否使用 Git 認證管理員 (GCM)。 credential.helper如果 設定為管理員,則 GCM 正在使用中。
  2. 依照下列步驟重設 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。
  3. 執行複製作業,以確認問題是否已解決。

注意: 根據適用於 Windows 的 Git 版本, credential.helper 值會有所不同。 如需詳細資訊,請參閱下表︰

適用於 Windows 的 Git 版本 適用於 Windows 的 Git 認證管理員 \(英文\) Git Credential Manager Core Git 認證管理員 (從 GCM Core 重新命名)
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