

本文属于机器翻译版本。若本译文内容与英语原文存在差异，则一律以英文原文为准。

# 排查 AWS CodeCommit 问题
<a name="troubleshooting"></a>

以下信息可帮助您处理 AWS CodeCommit 中的常见问题。

**Topics**
+ [对 Git 凭证和 HTTPS 连接进行故障排除 AWS CodeCommit](troubleshooting-gc.md)
+ [故障排除 git-remote-codecommit和 AWS CodeCommit](troubleshooting-grc.md)
+ [对 SSH 连接进行故障排除 AWS CodeCommit](troubleshooting-ssh.md)
+ [对凭证助手和 HTTPS 连接进行故障排除 AWS CodeCommit](troubleshooting-ch.md)
+ [Git 客户端疑难解答和 AWS CodeCommit](troubleshooting-git.md)
+ [对访问错误进行故障排除，以及 AWS CodeCommit](troubleshooting-ae.md)
+ [对配置错误进行故障排除，以及 AWS CodeCommit](troubleshooting-cf.md)
+ [控制台错误疑难解答和 AWS CodeCommit](troubleshooting-cs.md)
+ [故障排除触发器和 AWS CodeCommit](troubleshooting-ti.md)
+ [启用调试](#troubleshooting-debug)

# 对 Git 凭证和 HTTPS 连接进行故障排除 AWS CodeCommit
<a name="troubleshooting-gc"></a>

以下信息可以帮助您解决使用 Git 凭据和 HTTPS 连接 AWS CodeCommit 存储库时的常见问题。

**Topics**
+ [Git 凭证 AWS CodeCommit：当我在终端或命令行连接到我的 CodeCommit 存储库时，我一直看到输入凭据的提示](#troubleshooting-gc1)
+ [Git 凭证 AWS CodeCommit：我设置了 Git 凭证，但我的系统没有使用它们](#troubleshooting-gc2)

## Git 凭证 AWS CodeCommit：当我在终端或命令行连接到我的 CodeCommit 存储库时，我一直看到输入凭据的提示
<a name="troubleshooting-gc1"></a>

**问题：**当您尝试从终端或命令行推送、拉取 CodeCommit 存储库或以其他方式与仓库交互时，系统会提示您提供用户名和密码，并且必须为您的 IAM 用户提供 Git 证书。

**可能的修复措施：**出现此错误的最常见原因是，您的本地计算机运行的操作系统不支持凭证管理、没有安装凭证管理实用程序或者您尚未将 IAM 用户的 Git 凭证保存到某个凭证管理系统中。根据您的操作系统和本地环境，您可能需要安装凭证管理器、配置操作系统随附的凭证管理器或自定义您的本地环境以使用凭证存储。例如，如果您的计算机运行的是 macOS，您可以使用 Keychain Access 实用程序存储您的凭证。如果您的计算机运行的是 Windows，您可以使用随 Windows 版 Git 安装的 Git Credential Manager。有关更多信息，请参阅[适用于使用 Git 凭证的 HTTPS 用户](setting-up-gc.md)和 Git 文档中的[凭证存储](https://git-scm.com/book/en/v2/Git-Tools-Credential-Storage)。

## Git 凭证 AWS CodeCommit：我设置了 Git 凭证，但我的系统没有使用它们
<a name="troubleshooting-gc2"></a>

**问题：**当您尝试与 Git 客户端 CodeCommit 一起使用时，该客户端似乎没有使用您的 IAM 用户的 Git 证书。

**可能的修复措施：**造成此错误的最常见原因是您之前将计算机设置为使用 AWS CLI附带的凭证辅助程序。检查 .gitconfig 文件的配置部分 (与以下内容类似)，并将其删除：

```
[credential "https://git-codecommit.*.amazonaws.com"]
    helper = !aws codecommit credential-helper $@ 
    UseHttpPath = true
```

保存文件，打开一个新的命令行或终端会话，再次尝试连接。

计算机中可能还设置了多个凭证辅助程序或管理器，系统也可能默认使用其他配置。要重设默认使用的凭证辅助程序，可以在运行 **git config** 命令时使用 **--system** 选项取代 **--global** 或 **--local** 选项。

有关更多信息，请参阅[适用于使用 Git 凭证的 HTTPS 用户](setting-up-gc.md)和 Git 文档中的[凭证存储](https://git-scm.com/book/en/v2/Git-Tools-Credential-Storage)。

# 故障排除 git-remote-codecommit和 AWS CodeCommit
<a name="troubleshooting-grc"></a>

以下信息可帮助您排查在连接 AWS CodeCommit 存储库时遇到的与 **git-remote-codecommit** 有关的错误。

**Topics**
+ [我看到一个错误：git: 'remote-codecommit' is not a git command](#troubleshooting-grc-syn1)
+ [我看到一个错误：fatal: Unable to find remote helper for 'codecommit'](#troubleshooting-grc-syn2)
+ [克隆错误：我无法从 IDE 中克隆 CodeCommit 存储库](#troubleshooting-grc-ide1)
+ [推送或拉取错误：我无法将提交从 IDE 推送或拉取到 CodeCommit 存储库](#troubleshooting-grc-ide2)
+ [安装错误：我在尝试安装时看到 externally-managed-environment错误 git-remote-codecommit](#troubleshooting-grc-pm1)

## 我看到一个错误：git: 'remote-codecommit' is not a git command
<a name="troubleshooting-grc-syn1"></a>

**问题：**当你尝试使用时 git-remote-codecommit，你会看到一个不 git-remote-codecommit是 git 命令的错误。See 'git --help'”。

**可能的修复：**此错误的最常见原因是您尚未将 git-remote-codecommit可执行文件添加到 PATH 中，或者字符串包含语法错误。当 git 和 remote-codecommit 之间缺少连字符，或者前面放了一个额外的 git 时，就会发生这种情况。 git-remote-codecommit

如果您已经将本地安装更新到不支持的版本，也可能会遇到此错误。有关支持的 Python 版本的更多信息，请参阅[git-remote-codecommit](https://pypi.org/project/git-remote-codecommit/)。

有关设置和使用的更多信息 git-remote-codecommit，请参阅[使用的 HTTPS 连接 AWS CodeCommit 的设置步骤 git-remote-codecommit](setting-up-git-remote-codecommit.md)。

## 我看到一个错误：fatal: Unable to find remote helper for 'codecommit'
<a name="troubleshooting-grc-syn2"></a>

**问题：**当你尝试使用时 git-remote-codecommit，你会看到一条错误消息，指出 “致命：找不到'codemmit'的远程助手”。

**可能的修复措施：**出现此错误的最常见原因包括：
+ 的设置未完成 git-remote-codecommit
+ 您的安装位置不 git-remote-codecommit在您的路径中或未配置为`Path`环境变量的一部分
+ Python 不在您的路径中或者没有配置为 `Path` 环境变量的一部分
+ 您使用的终端或命令行窗口自安装完成后尚未重新启动 git-remote-codecommit

有关设置和使用的更多信息 git-remote-codecommit，请参阅[使用的 HTTPS 连接 AWS CodeCommit 的设置步骤 git-remote-codecommit](setting-up-git-remote-codecommit.md)。

## 克隆错误：我无法从 IDE 中克隆 CodeCommit 存储库
<a name="troubleshooting-grc-ide1"></a>

**问题：**尝试在 IDE 中克隆 CodeCommit 存储库时，会看到一个错误，提示端点或 URL 无效。

**可能的修复：**并非所有人都 IDEs 支持克隆**git-remote-codecommit**期间使用的 URL。从终端或命令行本地克隆存储库，然后将该本地存储库添加到 IDE 中。有关更多信息，请参阅 [步骤 3：Connect 连接到 CodeCommit 控制台并克隆存储库](setting-up-git-remote-codecommit.md#setting-up-git-remote-codecommit-connect-console)。

## 推送或拉取错误：我无法将提交从 IDE 推送或拉取到 CodeCommit 存储库
<a name="troubleshooting-grc-ide2"></a>

**问题：**当您尝试从 IDE 中提取或推送代码时，会看到连接错误。

**可能的修复：**此错误的最常见原因是 IDE 与 Git 远程辅助程序（如 **git-remote-codecommit**）不兼容。使用 Git 命令从命令行或终端手动更新本地存储库，而不是使用 IDE 功能提交、推送和拉取代码。

有关远程辅助程序和 Git 的更多信息，请参阅 [Git 文档](https://git-scm.com/docs/gitremote-helpers)。

## 安装错误：我在尝试安装时看到 externally-managed-environment错误 git-remote-codecommit
<a name="troubleshooting-grc-pm1"></a>

**问题：**当您尝试运行 `pip install git-remote-codecommit` 命令时，会出现一个错误，表明环境是在外部管理的。

**可能的修复措施：**出现此错误的最常见原因是您正在运行定义 EXTERNALLY-MANAGED 标记文件的 Python 发行版。针对这一错误的优秀解决方案是创建和使用虚拟环境。

有关外部管理的环境和 Python 的更多信息，请参阅 Python 文档中的 [Externally Managed Environments](https://packaging.python.org/en/latest/specifications/externally-managed-environments/#externally-managed-environments) 和 [Install packages in a virtual environment using pip and venv](https://packaging.python.org/en/latest/guides/installing-using-pip-and-virtual-environments/)。

# 对 SSH 连接进行故障排除 AWS CodeCommit
<a name="troubleshooting-ssh"></a>

以下信息可以帮助您解决使用 SSH 连接 CodeCommit 存储库时的常见问题。

**Topics**
+ [访问错误：已将公有密钥成功上传到 IAM，但在 Linux、macOS 或 Unix 系统上进行连接时失败](#troubleshooting-ae4)
+ [访问错误：已将公有密钥成功上传到 IAM 并且 SSH 测试成功，但在 Windows 系统上进行连接时失败](#troubleshooting-ae5)
+ [身份验证问题：连接到 CodeCommit 存储库时无法确定主机的真实性](#troubleshooting-ac1)
+ [IAM 错误：尝试向 IAM 添加公有密钥时，出现“格式无效”错误](#troubleshooting-iam1)
+ [我需要使用 SSH 凭证访问多个 Amazon Web Services 账户中的 CodeCommit 存储库](#troubleshooting-ssh-multi)
+ [Windows 上的 Git：尝试使用 SSH 进行连接时，Bash 仿真器或命令行卡住](#troubleshooting-gw2)
+ [公有密钥格式在某些 Linux 发行版中需要规范化](#troubleshooting-os-syn2)
+ [访问错误：连接到 CodeCommit 存储库时 SSH 公钥被拒绝](#troubleshooting-permission-denied-ssh-key)

## 访问错误：已将公有密钥成功上传到 IAM，但在 Linux、macOS 或 Unix 系统上进行连接时失败
<a name="troubleshooting-ae4"></a>

**问题：**当您尝试连接到 SSH 端点以与 CodeCommit 存储库通信时，无论是在测试连接还是克隆存储库时，连接都会失败或被拒绝。

**可能的修复措施：**分配给 IAM 中公有密钥的 SSH 密钥 ID 可能未关联到您尝试的连接。[您可能尚未配置配置文件](setting-up-ssh-unixes.md#cc-configure-config)、您可能无权访问配置文件、其他设置可能导致系统无法成功读取配置文件、您可能提供了错误的密钥 ID 或者您可能提供了 IAM 用户 ID 而不是密钥 ID。

您可以通过 IAM 控制台在 IAM 用户的配置文件中找到 SSH 密钥 ID：

![\[IAM 控制台中的 SSH 密钥 ID\]](http://docs.aws.amazon.com/zh_cn/codecommit/latest/userguide/images/codecommit-ssh-key-id-iam.png)


**注意**  
如果您 IDs 上传了多个 SSH 密钥，则密钥将按密钥 ID 的字母顺序列出，而不是按上传日期排列。请确保已复制与正确上传日期关联的密钥 ID。

尝试使用下面的命令测试连接：

```
ssh Your-SSH-Key-ID@git-codecommit.us-east-2.amazonaws.com
```

如果在确认连接后看到成功消息，说明您的 SSH 密钥 ID 是有效的。编辑配置文件，将您尝试的连接关联到 IAM 中的公有密钥。如果您不想编辑配置文件，可以在所有存储库连接前面加上 SSH 密钥 ID。例如，如果您想克隆名为的存储库*MyDemoRepo*而不修改配置文件以关联您的连接尝试，则可以运行以下命令：

```
git clone ssh://Your-SSH-Key-ID@git-codecommit.us-east-2.amazonaws.com/v1/repos/MyDemoRepo my-demo-repo
```

有关更多信息，请参阅 [适用于 Linux、macOS 或 Unix 上的 SSH 连接](setting-up-ssh-unixes.md)。

## 访问错误：已将公有密钥成功上传到 IAM 并且 SSH 测试成功，但在 Windows 系统上进行连接时失败
<a name="troubleshooting-ae5"></a>

**问题：**当您尝试使用 SSH 端点克隆存储库或与 CodeCommit 存储库通信时，会出现一条包含该短语的错误消息`No supported authentication methods available`。

**可能的修复措施：**导致该错误的最常见原因是您设置的某个 Windows 系统环境变量指示 Windows 在您尝试使用 SSH 时使用其他的程序。例如，您可能设置了 GIT\$1SSH 变量，将其指向了某个 PuTTY 工具集 (plink.exe)。这可能是一个旧式配置，或计算机上安装的一个或多个其他程序需要该配置。如果确定不需要该环境变量，可以打开系统属性来将其删除。

要解决这个问题，请打开 Bash 仿真器，再次尝试 SSH 连接，但包含 `GIT_SSH_COMMAND="SSH"` 作为前缀。例如，要使用 SSH 克隆存储库：

```
GIT_SSH_COMMAND="ssh" git clone ssh://git-codecommit.us-east-2.amazonaws.com/v1/repos/MyDemoRepo my-demo-repo
```

如果您的 Windows 版本要求在 Windows 命令行中通过 SSH 进行连接时必须将 SSH 密钥 ID 包含在连接字符串中，也可能会出现类似问题。尝试再次连接，这次请在命令中包含从 IAM 复制的 SSH 密钥 ID。例如：

```
git clone ssh://Your-SSH-Key-ID@git-codecommit.us-east-2.amazonaws.com/v1/repos/MyDemoRepo my-demo-repo
```

## 身份验证问题：连接到 CodeCommit 存储库时无法确定主机的真实性
<a name="troubleshooting-ac1"></a>

**问题：**当您尝试使用 SSH 端点与 CodeCommit 存储库通信时，会出现一条包含短语的警告消息 `The authenticity of host 'host-name' can't be established.`

**可能的修复措施：**您的凭证设置可能不正确。按照[适用于 Linux、macOS 或 Unix 上的 SSH 连接](setting-up-ssh-unixes.md) 或[适用于 Windows 上的 SSH 连接](setting-up-ssh-windows.md) 中的说明操作。

如果您已按照这些步骤操作但问题仍然存在，则可能有人在尝试 man-in-the-middle攻击。如果看到下面的消息，请键入 `no` 并按 Enter。

```
Are you sure you want to continue connecting (yes/no)?
```

在继续连接之前，请确保 CodeCommit 连接的指纹和公钥与 SSH 设置主题中记录的指纹和公钥相匹配。


**的公共指纹 CodeCommit**  

| 服务器 | 加密哈希类型 | 指纹 | 
| --- | --- | --- | 
| git-codecommit.us-east-2.amazonaws.com | MD5 | a9:6d:03:ed:08:42:21:be:06:e1:e0:2a:d1:75:31:5e | 
| git-codecommit.us-east-2.amazonaws.com | SHA256 | 3lBlW2g5xn/NA2Ck6dyeJIrQOWvn7n8UEs56fG6ZIzQ | 
| git-codecommit.us-east-1.amazonaws.com | MD5 | a6:9c:7d:bc:35:f5:d4:5f:8b:ba:6f:c8:bc:d4:83:84 | 
| git-codecommit.us-east-1.amazonaws.com | SHA256 | eLMY1j0DKA4uvDZcl/KgtIayZANwX6t8\$18isPtotBoY | 
| git-codecommit.us-west-2.amazonaws.com | MD5 | a8:68:53:e3:99:ac:6e:d7:04:7e:f7:92:95:77:a9:77 | 
| git-codecommit.us-west-2.amazonaws.com | SHA256 | 0pJx9SQpkbPUAHwy58UVIq0IHcyo1fwCpOOuVgcAWPo | 
| git-codecommit.eu-west-1.amazonaws.com | MD5 | 93:42:36:ea:22:1f:f1:0f:20:02:4a:79:ff:ea:12:1d | 
| git-codecommit.eu-west-1.amazonaws.com | SHA256 | tKjRkOL8dmJyTmSbeSdN1S8F/f0iql3RlvqgTOP1UyQ | 
| git-codecommit.ap-northeast-1.amazonaws.com | MD5 | 8e:a3:f0:80:98:48:1c:5c:6f:59:db:a7:8f:6e:c6:cb | 
| git-codecommit.ap-northeast-1.amazonaws.com | SHA256 | Xk/WeYD/K/bnBybzhiuu4dWpBJtXPf7E30jHU7se4Ow | 
| git-codecommit.ap-southeast-1.amazonaws.com | MD5 | 65:e5:27:c3:09:68:0d:8e:b7:6d:94:25:80:3e:93:cf | 
| git-codecommit.ap-southeast-1.amazonaws.com | SHA256 | ZIsVa7OVzxrTIf\$1Rk4UbhPv6Es22mSB3uTBojfPXIno | 
| git-codecommit.ap-southeast-2.amazonaws.com | MD5 | 7b:d2:c1:24:e6:91:a5:7b:fa:c1:0c:35:95:87:da:a0 | 
| git-codecommit.ap-southeast-2.amazonaws.com | SHA256 | nYp\$1gHas80HY3DqbP4yanCDFhqDVjseefVbHEXqH2Ec | 
| git-codecommit.ap-southeast-3.amazonaws.com | MD5 | 64:d9:e0:53:19:4f:a8:91:9a:c3:53:22:a6:a8:ed:a6 | 
| git-codecommit.ap-southeast-3.amazonaws.com | SHA256 | ATdkGSFhpqIu7RqUVT/1RZo6MLxxxUW9NoDVMbAc/6g | 
| git-codecommit.me-central-1.amazonaws.com | MD5 | bd:fa:e2:f9:05:84:d6:39:6f:bc:d6:8d:fe:de:61:76 | 
| git-codecommit.me-central-1.amazonaws.com | SHA256 | grceUDWubo4MzG1NoaKZKUfrgPvfN3ijliOnQr1lTZA | 
| git-codecommit.eu-central-1.amazonaws.com | MD5 | 74:5a:e8:02:fc:b2:9c:06:10:b4:78:84:65:94:22:2d | 
| git-codecommit.eu-central-1.amazonaws.com | SHA256 | MwGrkiEki8QkkBtlAgXbYt0hoZYBnZF62VY5RzGJEUY | 
| git-codecommit.ap-northeast-2.amazonaws.com | MD5 | 9f:68:48:9b:5f:fc:96:69:39:45:58:87:95:b3:69:ed | 
| git-codecommit.ap-northeast-2.amazonaws.com | SHA256 | eegAPQrWY9YsYo9ZHIKOmxetfXBHzAZd8Eya53Qcwko | 
| git-codecommit.sa-east-1.amazonaws.com | MD5 | 74:99:9d:ff:2b:ef:63:c6:4b:b4:6a:7f:62:c5:4b:51 | 
| git-codecommit.sa-east-1.amazonaws.com | SHA256 | kW\$1VKB0jpRaG/ZbXkgbtMQbKgEDK7JnISV3SVoyCmzU | 
| git-codecommit.us-west-1.amazonaws.com | MD5 | 3b:76:18:83:13:2c:f8:eb:e9:a3:d0:51:10:32:e7:d1 | 
| git-codecommit.us-west-1.amazonaws.com | SHA256 | gzauWTWXDK2u5KuMMi5vbKTmfyerdIwgSbzYBODLpzg | 
| git-codecommit.eu-west-2.amazonaws.com | MD5 | a5:65:a6:b1:84:02:b1:95:43:f9:0e:de:dd:ed:61:d3 | 
| git-codecommit.eu-west-2.amazonaws.com | SHA256 | r0Rwz5k/IHp/QyrRnfiM9j02D5UEqMbtFNTuDG2hNbs | 
| git-codecommit.ap-south-1.amazonaws.com | MD5 | da:41:1e:07:3b:9e:76:a0:c5:1e:64:88:03:69:86:21 | 
| git-codecommit.ap-south-1.amazonaws.com | SHA256 | hUKwnTj7\$1Xpx4Kddb6p45j4RazIJ4IhAMD8k29itOfE | 
| git-codecommit.ap-south-2.amazonaws.com | MD5 | bc:cc:9f:15:f8:f3:58:a2:68:65:21:e2:23:71:8d:ce | 
| git-codecommit.ap-south-2.amazonaws.com | SHA256 | Xe0CyZEOvgR5Xa2YUGqf\$1jn8/Ut7l7nX/CmslSFNEig | 
| git-codecommit.ca-central-1.amazonaws.com | MD5 | 9f:7c:a2:2f:8c:b5:74:fd:ab:b7:e1:fd:af:46:ed:23 | 
| git-codecommit.ca-central-1.amazonaws.com | SHA256 | Qz5puafQdANVprLlj6r0Qyh4lCNsF6ob61dGcPtFS7w | 
| git-codecommit.eu-west-3.amazonaws.com | MD5 | 1b:7f:97:dd:d7:76:8a:32:2c:bd:2c:7b:33:74:6a:76 | 
| git-codecommit.eu-west-3.amazonaws.com | SHA256 | uw7c2FL564jVoFgtc\$1ikzILnKBsZz7t9\$1CFdSJjKbLI | 
| git-代码提交。 us-gov-west-1.amazonaws.com | MD5 | 9f:6c:19:3b:88:cd:e8:88:1b:9c:98:6a:95:31:8a:69 | 
| git-代码提交。 us-gov-west-1.amazonaws.com | SHA256 | djXQoSIFcg8vHe0KVH1xW/gOF9X37tWTqu4Hkng75x4 | 
| git-代码提交。 us-gov-east-1.amazonaws.com | MD5 | 00:8d:b5:55:6f:05:78:05:ed:ea:cb:3f:e6:f0:62:f2 | 
| git-代码提交。 us-gov-east-1.amazonaws.com | SHA256 | fVb\$1R0z7qW7minenW\$1rUpAABRCRBTCzmETAJEQrg98 | 
| git-codecommit.eu-north-1.amazonaws.com | MD5 | 8e:53:d8:59:35:88:82:fd:73:4b:60:8a:50:70:38:f4 | 
| git-codecommit.eu-north-1.amazonaws.com | SHA256 | b6KSK7xKq\$1V8jl7iuAcjqXsG7zkqoUZZmmhYYFBq1wQ | 
| git-codecommit.me-south-1.amazonaws.com | MD5 | 0e:39:28:56:d5:41:e6:8d:fa:81:45:37:fb:f3:cd:f7 | 
| git-codecommit.me-south-1.amazonaws.com | SHA256 | O\$1NToCGgjrHekiBuOl0ad7ROGEsz\$1DBLXOd/c9wc0JU | 
| git-codecommit.ap-east-1.amazonaws.com | MD5 | a8:00:3d:24:52:9d:61:0e:f6:e3:88:c8:96:01:1c:fe | 
| git-codecommit.ap-east-1.amazonaws.com | SHA256 | LafadYwUYW8hONoTRpojbjNs9IRnbEwHtezD3aAIBX0 | 
| git-codecommit.cn-north-1.amazonaws.com.cn | MD5 | 11:7e:2d:74:9e:3b:94:a2:69:14:75:6f:5e:22:3b:b3 | 
| git-codecommit.cn-north-1.amazonaws.com.cn | SHA256 | IYUXxH2OpTDsyYMLIp\$1JY8CTLS4UX\$1ZC5JVZXPRaxc8 | 
| git-codecommit.cn-northwest-1.amazonaws.com.cn | MD5 | 2e:a7:fb:4c:33:ac:6c:f9:aa:f2:bc:fb:0a:7b:1e:b6 | 
| git-codecommit.cn-northwest-1.amazonaws.com.cn | SHA256 | wqjd6eHd0\$1mOBx\$1dCNuL0omUoCNjaDtZiEpWj5TmCfQ | 
| git-codecommit.eu-south-1.amazonaws.com | MD5 | b9:f6:5d:e2:48:92:3f:a9:37:1e:c4:d0:32:0e:fb:11 | 
| git-codecommit.eu-south-1.amazonaws.com | SHA256 | lyXrWbCg3uQmJrl1XxB/ASR7ugW1Ysf5yzYOJbudHsI | 
| git-codecommit.ap-northeast-3.amazonaws.com | MD5 | 25:17:40:da:b9:d4:18:c3:b6:b3:fb:ed:1c:20:fe:29 | 
| git-codecommit.ap-northeast-3.amazonaws.com | SHA256 | 2B815B9F0AvwLnRxSVxUz4kDYmtEQUGGdQYP8OQLXhA | 
| git-codecommit.af-south-1.amazonaws.com | MD5 | 21:a0:ba:d7:c1:d1:b5:39:98:8d:4d:7c:96:f5:ca:29 | 
| git-codecommit.af-south-1.amazonaws.com | SHA256 | C34ji3x/cnsDZjUpyNGXdE5pjHYimqJrQZ3leTgqJHM | 
| git-codecommit.il-central-1.amazonaws.com | MD5 | 04:74:89:16:98:7a:61:b1:69:46:42:3c:d1:b4:ac:a9 | 
| git-codecommit.il-central-1.amazonaws.com | SHA256 | uFxhp51kUWhleTLeYbxQVYm4RnNLNZ5Dbdm1cgdSl/8 | 

## IAM 错误：尝试向 IAM 添加公有密钥时，出现“格式无效”错误
<a name="troubleshooting-iam1"></a>

**问题：**在 IAM 中，尝试设置为使用 SSH 时 CodeCommit，当您尝试添加公钥`Invalid format`时，会出现一条错误消息，其中包含该短语。

**可能的修复措施：**IAM 要求公有密钥必须采用 ssh-rsa 格式或 PEM 格式进行编码。它仅接受 OpenSSH 格式的公钥，并具有其他要求，如 *IAM 用户*指南中的 “[使用 SSH 密钥](https://docs.aws.amazon.com/IAM/latest/UserGuide/id_credentials_ssh-keys.html#ssh-keys-code-commit)” CodeCommit 中所述。如果提供其他格式的公有密钥，或者密钥包含的位数不够，就会出现此错误。
+ 当您复制 SSH 公钥时，您的操作系统可能引入了换行符。确保添加到 IAM 的公有密钥中没有换行符。
+ 某些 Windows 操作系统不使用 OpenSSH 格式。要生成密钥对并复制 IAM 要求的 OpenSSH 格式，请参阅[第 3 步：为 Git 设置公钥和私钥以及 CodeCommit](setting-up-ssh-windows.md#setting-up-ssh-windows-keys-windows)。

有关 IAM 中 SSH 密钥要求的更多信息，请参阅 IA *M 用户指南 CodeCommit*中的 [SSH 密钥与一起使用](https://docs.aws.amazon.com/IAM/latest/UserGuide/id_credentials_ssh-keys.html#ssh-keys-code-commit)。

## 我需要使用 SSH 凭证访问多个 Amazon Web Services 账户中的 CodeCommit 存储库
<a name="troubleshooting-ssh-multi"></a>

**问题：**我想在多个 Amazon Web Services 账户中设置对 CodeCommit存储库的 SSH 访问权限。

**可能的修复方法：**您可以为每个 Amazon Web Services 账户创建唯一的 SSH 密 public/private 钥对，并使用每个密钥配置 IAM。然后，您可以使用与公有密钥关联的每个 IAM 用户 ID 的相关信息来配置您的 \$1/.ssh/config 文件。例如：

```
Host codecommit-1
    Hostname git-codecommit.us-east-1.amazonaws.com
    User SSH-KEY-ID-1 # This is the SSH Key ID you copied from IAM in Amazon Web Services account 1 (for example, APKAEIBAERJR2EXAMPLE1).
    IdentityFile ~/.ssh/codecommit_rsa # This is the path to the associated public key file, such as id_rsa.  We advise creating CodeCommit specific _rsa files.
 
Host codecommit-2
    Hostname git-codecommit.us-east-1.amazonaws.com
    User SSH-KEY-ID-2 # This is the SSH Key ID you copied from IAM in Amazon Web Services account 2 (for example, APKAEIBAERJR2EXAMPLE2).
    IdentityFile ~/.ssh/codecommit_2_rsa # This is the path to the other associated public key file.  We advise creating CodeCommit specific _rsa files.
```

在此配置中，您可以将“git-codecommit.us-east-1.amazonaws.com”替换为“codecommit-2”。例如，要克隆第二个 Amazon Web Services 账户中的存储库，请运行以下命令：

```
git clone ssh://codecommit-2/v1/repos/YourRepositoryName
```

要为存储库设置远程操作，请运行 **git remote add**。例如：

```
git remote add origin ssh://codecommit-2/v1/repos/YourRepositoryName
```

如需更多示例，请参阅[此论坛帖子](https://forums.aws.amazon.com/thread.jspa?messageID=711158)和[此投稿 GitHub](https://gist.github.com/justinpawela/3a7056cd592d688425e59de2ef6f1da0)。

## Windows 上的 Git：尝试使用 SSH 进行连接时，Bash 仿真器或命令行卡住
<a name="troubleshooting-gw2"></a>

**问题：**为 Windows 配置 SSH 访问并在命令行或终端中确认连接后，当尝试在命令提示符或 Bash 仿真器中 **git pull**、**git push** 或 **git clone** 命令时，显示一条消息，指示服务器的主机密钥未缓存在注册表中，并且有关在缓存中存储密钥的提示卡住（不接受 y/n/return 输入）。

**可能的修复措施：**导致该错误的最常见原因是 Git 环境配置为使用 OpenSSH 以外的程序 (可能是 PuTTY) 进行身份验证。这会在某些配置中导致与缓存密钥有关的问题。要解决这个问题，请尝试以下操作之一：
+ 打开 Bash 仿真器，在 Git 命令前添加 `GIT_SSH_COMMAND="ssh"` 参数。例如，在尝试推送到存储库时，不要键入 **git push**，而是键入：

  ```
  GIT_SSH_COMMAND="ssh" git push
  ```
+ 如果您安装了 PuTTY，请打开 PuTTY，然后在**主机名（或 IP 地址）**中输入要 CodeCommit 访问的终端节点（例如 git-codecommit.us-east-2.amazonaws.com）。选择**打开**。当出现 PuTTY 安全提醒的提示时，选择 **Yes (是)** 永久缓存密钥。
+ 重命名或删除不再使用的 `GIT_SSH` 环境变量。然后，打开新的命令提示符或 Bash 仿真器会话，再次尝试您的命令。

有关其他解决方案，请参阅 Stack Overflow 上将[密钥存储在缓存中的 Git clone/pull 持续冻结](http://stackoverflow.com/questions/33240137/git-clone-pull-continually-freezing-at-store-key-in-cache)。

## 公有密钥格式在某些 Linux 发行版中需要规范化
<a name="troubleshooting-os-syn2"></a>

**问题：**尝试配置公有-私有密钥对时，收到一个错误。

**可能的修复措施：**某些 Linux 发行版需要在 `~/.ssh/config` 文件中添加额外的配置行，以指定公有密钥的可接受类型。有关更多信息，请参阅有关 `PubkeyAcceptedKeyTypes` 的具体发行版文档。

## 访问错误：连接到 CodeCommit 存储库时 SSH 公钥被拒绝
<a name="troubleshooting-permission-denied-ssh-key"></a>

**问题：**当您尝试使用 SSH 端点与 CodeCommit 存储库通信时，会出现一条包含该短语的错误消息`Error: public key denied`。

**可能的修复措施：**导致出现此错误的最常见原因是您尚未完成 SSH 连接设置。请配置公有和私有 SSH 密钥对，然后将公有密钥与您的 IAM 用户相关联。有关配置 SSH 的更多信息，请参阅[适用于 Linux、macOS 或 Unix 上的 SSH 连接](setting-up-ssh-unixes.md) 和[适用于 Windows 上的 SSH 连接](setting-up-ssh-windows.md)。

# 对凭证助手和 HTTPS 连接进行故障排除 AWS CodeCommit
<a name="troubleshooting-ch"></a>

当您使用 AWS CLI 和 HTTPS 附带的凭证帮助程序连接到 CodeCommit 存储库时，以下信息可以帮助您解决常见问题。

**注意**  
尽管证书助手是支持 CodeCommit 使用联合访问权限、身份提供商或临时证书进行连接的方法，但推荐的方法是安装和使用该**git-remote-codecommit**实用程序。有关更多信息，请参阅 [使用的 HTTPS 连接 AWS CodeCommit 的设置步骤 git-remote-codecommit](setting-up-git-remote-codecommit.md)。

**Topics**
+ [在运行 `git config` 命令来配置凭证助手时，收到错误](#troubleshooting-os-syn1)
+ [尝试克隆存储库时出现读取用户名错误](#troubleshooting-gitconfig1)
+ [在 Windows 中使用凭证辅助程序时返回的“找不到命令”错误](#troubleshooting-py3)
+ [当我连接到 CodeCommit 存储库时，系统会提示我输入用户名](#troubleshooting-ae1)
+ [macOS 版 Git：我成功配置了凭证助手，但在访问我的存储库时被系统拒绝 (403)](#troubleshooting-macoshttps)
+ [Windows 版 Git：我安装了 Windows 版 Git，但在访问我的存储库时被系统拒绝 (403)](#troubleshooting-windowshttps)

## 在运行 `git config` 命令来配置凭证助手时，收到错误
<a name="troubleshooting-os-syn1"></a>

**问题：**当你尝试运行 git config 命令来配置凭证助手以与 CodeCommit 仓库通信时，你会看到一个错误消息，即参数太少，或者使用提示提示 Git 配置命令和语法。

**可能的修复措施：**出现此错误的最常见原因是，在 Windows 操作系统中针对命令使用单引号，或者在 Linux、macOS 或 Unix 操作系统中针对命令使用双引号。正确的语法如下：
+ Windows：`git config --global credential.helper "!aws codecommit credential-helper $@"`
+ Linux、macOS 或 Unix：`git config --global credential.helper '!aws codecommit credential-helper $@'`

## 尝试克隆存储库时出现读取用户名错误
<a name="troubleshooting-gitconfig1"></a>

**问题：**当您尝试使用凭证助手克隆存储库时，会看到一条错误消息，指出系统无法读取存储库 URL 的用户名。

**可能的修复措施：**导致该错误的最常见原因是，未在计算机上正确创建或配置 .gitconfig 文件。打开您的 .gitconfig 文件并确保正确设置了凭证助手。如果您使用的是运行 Linux、macOS 或 Unix 的计算机，还要确保为您的系统正确设置了 `$HOME ` 的值。

## 在 Windows 中使用凭证辅助程序时返回的“找不到命令”错误
<a name="troubleshooting-py3"></a>

**问题：**更新 AWS CLI 后，凭证助手与 CodeCommit `aws codecommit credential-helper $@ get: aws: command not found`存储库的连接失败。

**原因**：出现此错误的最常见原因是您的 AWS CLI 版本已更新为使用 Python 3 的版本。MSI 程序包存在一个已知问题。要验证您是否有其中一个受影响的版本，请打开命令行并运行以下命令：`aws --version`

如果输出 Python 版本以 3 开头，则表示您拥有受影响的版本。例如：

```
aws-cli/1.16.62 Python/3.6.2 Darwin/16.7.0 botocore/1.12.52
```

**可能的修复措施：**您可以执行下列操作之一来解决此问题：
+ 使用 Python 和 pip 而不是 MSI AWS CLI 在 Windows 上安装和配置。有关更多信息，请参阅[在 Windows AWS CLI 上安装 Python、pip 等](https://docs.aws.amazon.com/cli/latest/userguide/install-windows.html#awscli-install-windows-pip)。
+ 手动编辑 `.gitconfig` 文件，更改 `[credential]` 部分以明确指向本地计算机上的 `aws.cmd`。例如：

  ```
  [credential]    
      helper = !"\C:\\Program Files\\Amazon\\AWSCLI\\bin\\aws.cmd\" codecommit credential-helper $@ 
      UseHttpPath = true
  ```
+ 运行 **git config** 命令以更新 `.gitconfig` 文件来明确引用 `aws.cmd`，并手动更新 PATH 环境变量以便根据需要包含命令的路径。例如：

  ```
  git config --global credential.helper "!aws.cmd codecommit credential-helper $@"
  git config --global credential.UseHttpPath true
  ```

## 当我连接到 CodeCommit 存储库时，系统会提示我输入用户名
<a name="troubleshooting-ae1"></a>

**问题：**当您尝试使用凭证助手与 CodeCommit 存储库通信时，会出现一条消息，提示您输入用户名。

**可能的修复方法：** AWS 配置您的配置文件或确保您使用的配置文件是您为使用而配置的配置文件 CodeCommit。有关设置的更多信息，请参阅[使用凭证助手设置与 Linux、macOS 或 Unix 上 AWS CodeCommit 存储库的 HTTPS 连接的 AWS CLI 步骤](setting-up-https-unixes.md)或[使用 AWS CLI 凭据助手在 Windows 上与 Windows 上的 AWS CodeCommit 存储库进行 HTTPS 连接的设置步骤](setting-up-https-windows.md)。有关 IAM、访问密钥和秘密密钥的更多信息，请参阅[管理 IAM 用户的访问密钥](https://docs.aws.amazon.com/IAM/latest/UserGuide/ManagingCredentials.html)和[如何获取凭证？](https://docs.aws.amazon.com/IAM/latest/UserGuide/IAM_Introduction.html#IAM_SecurityCredentials)。

## macOS 版 Git：我成功配置了凭证助手，但在访问我的存储库时被系统拒绝 (403)
<a name="troubleshooting-macoshttps"></a>

**问题：**在 macOS 上，凭证助手似乎无法正常访问或使用您的凭证。这可能是由以下两种原因导致的：
+  AWS CLI 的配置与存储库所在的存储库 AWS 区域 不同。
+ Keychain Access 实用程序保存的凭证已过期。

**可能的修复方法：**要验证是否为正确的区域配置了，请运行**aws configure**命令并查看显示的信息。 AWS CLI 如果 CodeCommit存储库与显示的存储库 AWS 区域 不同 AWS CLI，则必须运行**aws configure**命令并将值更改为适合该区域的值。有关更多信息，请参阅 [步骤 1：的初始配置 CodeCommit](setting-up-https-unixes.md#setting-up-https-unixes-account)。

 在 OS X 和 macOS 上发布的 Git 默认版本使用 Keychain Access 实用程序来保存生成的凭证。出于安全考虑，为访问 CodeCommit 存储库而生成的密码是临时的，因此存储在钥匙串中的证书将在大约 15 分钟后停止工作。如果您仅使用访问 Git CodeCommit，请尝试以下操作：

1. 在终端上，运行 **git config** 命令查找在其中定义 Keychain Access 实用程序的 Git 配置文件 (`gitconfig`)。根据本地系统和首选项的不同，您可能有多个 `gitconfig` 文件。

   ```
   git config -l --show-origin | grep credential
   ```

   在此命令的输出中，搜索类似于以下内容的结果：

   ```
   file:/path/to/gitconfig  credential.helper=osxkeychain
   ```

   该行开头列出的文件就是您必须编辑的 Git 配置文件。

1. 要编辑 Git 配置文件，请使用纯文本编辑器或运行以下命令：

   ```
   nano /usr/local/git/etc/gitconfig
   ```

1. 使用以下任一策略修改配置：
   + 注释掉或删除包含 `helper = osxkeychain` 的凭证部分。例如：

     ```
     # helper = osxkeychain
     ```
   + 更新 `aws credential helper` 和 `osxkeychain` 凭证助手部分以包含上下文。例如，`osxkeychain`if 用于对以下对象进行身份验证 GitHub：

     ```
     [credential "https://git-codecommit.us-east-1.amazonaws\.com"]
       helper = !aws --profile CodeCommitProfile codecommit credential-helper $@
       UseHttpPath = true
     [credential "https://github.com"]
       helper = osxkeychain
     ```

     在此配置中，当远程主机匹配“`https://github.com`”时，Git 将使用 `osxkeychain` 助手，当远程主机匹配“`https://git-codecommit\.us-east-1\.amazonaws.com`”时，Git 将使用凭证助手。
   + 在凭证助手之前添加一个空字符串助手。例如，要在 CLI 中使用名为*CodeCommitProfile*的配置文件时不使用`osxkeychain`助手：

     ```
     [credential]
       helper =
       helper = !aws --profile CodeCommitProfile codecommit credential-helper $@
       UseHttpPath = true
     ```
**提示**  
如果您想将所有配置文件排除在外，也可以将空字符串帮助行后面的行配置为不匹配 CodeCommit ：  

     ```
     helper = !aws codecommit credential-helper $@
     ```

   或者，如果您希望继续使用 Keychain Access 实用程序来缓存其他 Git 存储库的凭证，请修改标头，而不要注释掉该行。例如，要允许缓存凭证 GitHub，可以按如下方式修改标头：

   ```
   [credential "https://github.com"]
      helper = osxkeychain
   ```

如果您使用 Git 访问其他存储库，则可以配置 Keychain Access 实用程序，使其不为存储 CodeCommit 库提供凭据。配置 Keychain Access 实用程序：

1. 打开 Keychain Access 实用程序。(您可以使用 Finder 查找它。)

1. 搜索存储库`git-codecommit.us-east-2.amazonaws.com`并将其*us-east-2*替换为存储库 AWS 区域 所在的位置。突出显示该行，打开上下文菜单 (右键单击)，然后选择 **Get Info**。

1. 选择 **Access Control** 选项卡。

1. 在 **Confirm before allowing access (运行访问前进行确认)** 中，选择 `git-credential-osxkeychain`，然后选择减号将它从列表中删除。
**注意**  
从列表中删除 `git-credential-osxkeychain` 后，您在每次运行 Git 命令时都会看到一个对话框。选择**拒绝**以继续。如果不希望显示弹出对话框，可考虑下面几种替代选项：  
 CodeCommit 使用 SSH 或 Git 凭据进行连接，而不是使用 HTTPS 的凭据助手进行连接。有关更多信息，请参阅[适用于 Linux、macOS 或 Unix 上的 SSH 连接](setting-up-ssh-unixes.md)和[适用于使用 Git 凭证的 HTTPS 用户的设置](setting-up-gc.md)。
在 Keychain Access 实用程序中，在 `git-codecommit.us-east-2.amazonaws.com` 的**访问控制**选项卡上，选择**允许所有应用程序访问此项目（对此项目的访问不受限制）**选项。这将阻止弹出窗口，但凭证终究会到期（平均而言，大约需要 15 分钟），然后会出现 403 错误消息。如果发生这种情况，您必须删除密钥链项才能恢复功能。
安装默认不使用密钥链的 Git 版本。
考虑制定一个删除密钥链项的脚本解决方案。要查看社区生成的脚本解决方案示例，请参阅[中的 ](integrations.md#integrations-community-code)定期删除 OS X Certificate Store 中缓存凭证的 Mac OS X 脚本[产品和服务集成](integrations.md)。

如果要完全阻止 Git 使用 Keychain Access 实用工具，可以配置 Git 以停止使用 osxkeychain 作为凭证辅助程序。例如，如果您打开一个终端并运行命令 `git config --system credential.helper`，并且它返回 `osxkeychain`，则 Git 设置为使用 Keychain Access 实用程序。您可以使用以下命令更改此设置：

```
git config --system --unset credential.helper
```

请注意，通过运行带`--system`选项的此命令会更改系统范围内所有用户的 Git 行为，这可能会对其他用户或其他存储库产生意想不到的后果（如果您除此之外还使用其他存储库服务）。 CodeCommit还要注意，此方法可能需要使用 `sudo`，并且您的账户可能没有足够的系统权限来应用此更改。确保通过重新运行 `git config --system credential.helper` 命令来验证该命令是否已成功应用。有关更多信息，请参阅[自定义 Git – Git 配置](https://git-scm.com/book/en/v2/Customizing-Git-Git-Configuration)和 [Stack Overflow 上的此文章](https://stackoverflow.com/questions/16052602/disable-git-credential-osxkeychain)。

## Windows 版 Git：我安装了 Windows 版 Git，但在访问我的存储库时被系统拒绝 (403)
<a name="troubleshooting-windowshttps"></a>

**问题：**在 Windows 上，凭证辅助程序似乎无法正常访问或使用您的凭证。这可能是由多种原因导致的：
+  AWS CLI 的配置与存储库所在的存储库 AWS 区域 不同。
+ 默认情况下，适用于 Windows 的 Git 会安装一个 Git 凭据管理器实用程序，该实用程序与使用 AWS 凭据助手的 CodeCommit 连接不兼容。安装后，它会导致与存储库的连接失败，即使证书助手已安装 AWS CLI 并配置为与存储库的连接。 CodeCommit
+ 某些版本的 Windows 版 Git 不完全符合 [RFC 2617](https://tools.ietf.org/html/rfc2617#page-5) 和 [RFC 4559](https://tools.ietf.org/html/rfc4559#page-2) 标准，这可能会导致 Git 凭证和 AWS CLI随附的凭证辅助程序出现问题。有关更多信息，请参阅 [Version 2.11.0(3) does not ask for username/password](https://github.com/git-for-windows/git/issues/1034)。

**可能的修复方法：**
+ 如果您尝试使用附带的凭证帮助器 AWS CLI，请考虑通过 HTTPS 连接 Git 凭证，而不是使用凭证帮助器。与 AWS CodeCommit凭证助手不同，为 IAM 用户配置的 Git 凭证与 Windows 版 Git Credential Manager 兼容。有关更多信息，请参阅 [适用于使用 Git 凭证的 HTTPS 用户](setting-up-gc.md)。

  如果要使用凭证助手来验证配置是否正确 AWS 区域，请运行**aws configure**命令并查看显示的信息。 AWS CLI 如果 CodeCommit 存储库与显示的存储库 AWS 区域 不同 AWS CLI，则必须运行**aws configure**命令并将值更改为适合该区域的值。有关更多信息，请参阅 [步骤 1：的初始配置 CodeCommit](setting-up-https-windows.md#setting-up-https-windows-account)。
+ 如果可能，请卸载并重新安装 Windows 版 Git。在安装 Windows 版 Git 时，清除安装 Git Credential Manager 实用程序选项的复选框。该凭证管理器与 AWS CodeCommit的凭证辅助程序不兼容。如果安装了 Git Credential Manager 或其他凭证管理实用程序，但不想卸载它，也可以修改 `.gitconfig` 文件并为 CodeCommit 添加特定的凭证管理：

  1. 打开 “**控制面板”**，选择 “**凭据管理器**”，然后删除所有存储的凭据。 CodeCommit

  1. 用任意纯文本编辑器（如“记事本”）打开您的 `.gitconfig` 文件。
**注意**  
如果使用多个 Git 配置文件，则可能同时存在本地和全局 `.gitconfig` 文件。请务必编辑相应的文件。

  1. 向您的 `.gitconfig` 文件添加以下部分：

     ```
     [credential "https://git-codecommit.*.amazonaws.com"]
         helper = !aws codecommit credential-helper $@ 
         UseHttpPath = true
     ```

  1. 保存文件，打开一个新的命令行会话，再次尝试连接。

  如果您想在连接到存储库 AWS CodeCommit 时使用凭证助手，在连接到其他托管 CodeCommit 存储库（例如 GitHub 存储库）时使用其他凭证管理系统，也可以使用这种方法。

  要重置默认使用的凭证辅助程序，可以在运行 **git config** 命令时使用 **--system** 选项取代 **--global** 或 **--local**。
+ 在 Windows 计算机上使用 Git 凭证时，可以通过在连接字符串中包含 Git 凭证用户名来解决任何 RFC 不合规问题。例如，要解决这个问题并克隆一个名*MyDemoRepo*为美国东部（俄亥俄州）地区的存储库，请执行以下操作：

  ```
  git clone https://Your-Git-Credential-Username@git-codecommit.us-east-2.amazonaws.com/v1/repos/MyDemoRepo my-demo-repo
  ```
**注意**  
如果您的 Git 凭证用户名中含有 `@` 字符，则这种方法无效。您必须对该字符进行 URL 编码（也称作 URL 转义或[百分号编码](https://en.wikipedia.org/wiki/Percent-encoding)）。

# Git 客户端疑难解答和 AWS CodeCommit
<a name="troubleshooting-git"></a>

以下信息可帮助您排查对 AWS CodeCommit 存储库使用 Git 时的常见问题。有关排查在使用 HTTPS 或 SSH 时出现的与 Git 客户端相关的问题，另请参阅[Git 凭证 (HTTPS) 问题排查](troubleshooting-gc.md)、[SSH 连接问题排查](troubleshooting-ssh.md)和[凭证助手 (HTTPS) 问题排查](troubleshooting-ch.md)。

**Topics**
+ [Git 错误：Error: RPC failed; result=56, HTTP code = 200 fatal: The remote end hung up unexpectedly](#troubleshooting-ge1)
+ [Git 错误：引用更新命令过多](#troubleshooting-ge2)
+ [Git 错误：在某些版本的 Git 中，无法通过 HTTPS 执行推送](#troubleshooting-ge3)
+ [Git 错误：“gnutls\$1handshake() failed”](#troubleshooting-ge4)
+ [Git 错误：Git 找不到 CodeCommit 仓库或无权访问仓库](#troubleshooting-ge5)
+ [Windows 上的 Git：没有支持的身份验证方法可用 (publickey)](#troubleshooting-gw1)

## Git 错误：Error: RPC failed; result=56, HTTP code = 200 fatal: The remote end hung up unexpectedly
<a name="troubleshooting-ge1"></a>

**问题：**在推送较大的更改、大量更改或大型存储库时，长时间运行的 HTTPS 连接通常会因为网络问题或防火墙设置而提前终止。

**可能的修复措施：**改用 SSH 推送，或在迁移大型存储库时按照[以增量方式迁移存储库](how-to-push-large-repositories.md)中的步骤操作。还要确保未超出单个文件的大小限制。有关更多信息，请参阅 [配额](limits.md)。

## Git 错误：引用更新命令过多
<a name="troubleshooting-ge2"></a>

**问题：**每次推送的引用更新数量最多为 4000 个。当推送包含超过 4000 个引用更新时，会出现这种错误。

**可能的修复措施：**尝试使用 `git push --all` 和 `git push --tags` 分别推送分支和标签。如果标签过多，将标签拆分成多个推送批次。有关更多信息，请参阅 [配额](limits.md)。

## Git 错误：在某些版本的 Git 中，无法通过 HTTPS 执行推送
<a name="troubleshooting-ge3"></a>

**问题：**更新到 7.41.0 的 curl 存在导致基于 SSPI 的摘要身份验证失败的问题。已知受影响的 Git 版本包括 1.9.5.msysgit.1。某些版本的 Windows 版 Git 可能不完全符合 [RFC 2617](https://tools.ietf.org/html/rfc2617#page-5) 和 [RFC 4559](https://tools.ietf.org/html/rfc4559#page-2) 标准，这可能会导致使用 Git 凭证或 AWS CLI随附的凭证辅助程序的 HTTPS 连接出现问题。

**可能的修复措施：**检查 Git 版本是否存在已知问题，或使用更早/更高的版本。有关 mysysgit 的更多信息，请参阅论坛中的[推送到 HTTPS 已损坏](https://github.com/msysgit/git/issues/332)。 GitHub 有关 Windows 版 Git 的版本问题的更多信息，请参阅[版本 2.11.0(3) 不需要用户名/密码](https://github.com/git-for-windows/git/issues/1034)。

## Git 错误：“gnutls\$1handshake() failed”
<a name="troubleshooting-ge4"></a>

**问题：**在 Linux 中，当你尝试使用 Git 与 CodeCommit 仓库通信时，会出现一条包含该短语的错误消息`error: gnutls_handshake() failed`。

**可能的修复措施：**基于 OpenSSL 编译 Git。Ask Ubuntu 论坛提供了一个解决方案，请参阅 [ "Error: gnutls\$1handshake() failed" When Connecting to HTTPS Servers](http://askubuntu.com/questions/186847/error-gnutls-handshake-falied-when-connecting-to-https-servers)。

或者，使用 SSH 而不是 HTTPS 来与 CodeCommit 存储库通信。

## Git 错误：Git 找不到 CodeCommit 仓库或无权访问仓库
<a name="troubleshooting-ge5"></a>

**问题：**连接字符串中的尾部斜杠可能导致连接尝试失败。

**可能的修复措施：**确保提供正确的存储库名称和连接字符串，并且没有尾随斜杠。有关更多信息，请参阅 [连接存储库](how-to-connect.md)。

## Windows 上的 Git：没有支持的身份验证方法可用 (publickey)
<a name="troubleshooting-gw1"></a>

**问题：**为 Windows 配置 SSH 访问后，在尝试使用 **git pull**、**git push** 或 **git clone** 命令时出现拒绝访问错误。

**可能的修复措施：**导致该错误的最常见原因是计算机上存在 GIT\$1SSH 环境变量，并且该变量配置为支持其他连接实用程序 (如 PuTTY)。要解决这个问题，请尝试以下操作之一：
+ 打开 Bash 仿真器，在 Git 命令前添加 `GIT_SSH_COMMAND="ssh"` 参数。例如，在尝试克隆存储库时，不要运行 **git clone ssh://git-codecommit.us-east-2.amazonaws.com/v1/repos/MyDemoRepo my-demo-repo**，而是运行：

  ```
  GIT_SSH_COMMAND="ssh" git clone ssh://git-codecommit.us-east-2.amazonaws.com/v1/repos/MyDemoRepo my-demo-repo
  ```
+ 重命名或删除不再使用的 `GIT_SSH` 环境变量。然后，打开新的命令提示符或 Bash 仿真器会话，再次尝试您的命令。

有关在 Windows 使用 SSH 时如何排查 Git 问题的更多信息，请参阅[SSH 连接问题排查](troubleshooting-ssh.md)。

# 对访问错误进行故障排除，以及 AWS CodeCommit
<a name="troubleshooting-ae"></a>

以下信息可帮助您排查在连接 AWS CodeCommit 存储库时遇到的访问错误。

**Topics**
+ [访问错误：当我从 Windows 连接到 CodeCommit 存储库时，系统会提示我输入用户名和密码](#troubleshooting-ae1w)
+ [访问错误：连接到 CodeCommit 存储库时公钥被拒绝](#troubleshooting-ae2)
+ [访问错误：连接到存储库时出现 “超出速率” 或 “429” 消息 CodeCommit](#troubleshooting-ae3)

## 访问错误：当我从 Windows 连接到 CodeCommit 存储库时，系统会提示我输入用户名和密码
<a name="troubleshooting-ae1w"></a>

**问题：**当你尝试使用 Git 与 CodeCommit 仓库通信时，你会看到一个对话框，提示你输入用户名和密码。

**可能的修复措施：**这可能是 Windows 内置的凭证管理系统造成的。根据您的配置，执行以下操作之一：
+ 如果使用 Git 凭证进行 HTTPS 连接，则您的 Git 凭证尚未存储在系统中。请提供 Git 凭证并继续。应该不会再提示您。有关更多信息，请参阅 [适用于使用 Git 凭证的 HTTPS 用户](setting-up-gc.md)。
+ 如果您将 HTTPS 与的凭据助手一起使用 AWS CodeCommit，则它与 Windows 凭据管理系统不兼容。选择**取消**。

  这也可能表明您在安装 Windows 版 Git 时安装了 Git Credential Manager。Git 凭据管理器与 CodeCommit 包含在中的凭证助手不兼容。 AWS CLI考虑卸载 Git Credential Manager。您还可以安装和配置 **git-remote-codecommit** 作为使用 CodeCommit 的凭证辅助程序的替代方法。

  有关更多信息，请参阅 [使用的 HTTPS 连接 AWS CodeCommit 的设置步骤 git-remote-codecommit](setting-up-git-remote-codecommit.md)、[用于在 Windows 上使用 AWS CLI 凭据助手进行 HTTPS 连接](setting-up-https-windows.md) 和 [Windows 版 Git：我安装了 Windows 版 Git，但在访问我的存储库时被系统拒绝 (403)](troubleshooting-ch.md#troubleshooting-windowshttps)。

## 访问错误：连接到 CodeCommit 存储库时公钥被拒绝
<a name="troubleshooting-ae2"></a>

**问题：**当您尝试使用 SSH 端点与 CodeCommit 存储库通信时，会出现一条包含该短语的错误消息`Error: public key denied`。

**可能的修复措施：**导致出现此错误的最常见原因是您尚未完成 SSH 连接设置。请配置公有和私有 SSH 密钥对，然后将公有密钥与您的 IAM 用户相关联。有关配置 SSH 的更多信息，请参阅[适用于 Linux、macOS 或 Unix 上的 SSH 连接](setting-up-ssh-unixes.md) 和[适用于 Windows 上的 SSH 连接](setting-up-ssh-windows.md)。

## 访问错误：连接到存储库时出现 “超出速率” 或 “429” 消息 CodeCommit
<a name="troubleshooting-ae3"></a>

**问题：**当您尝试与 CodeCommit 存储库进行通信时，出现一条消息，指示“Rate Exceeded (数量超出限制)”或显示错误代码“429”。通信速度显著减慢或失败。

**原因：**对的所有调用 CodeCommit，无论是来自应用程序、 AWS CLI、Git 客户端还是来自的 AWS 管理控制台，都受每秒最大请求数和活动请求总数的约束。在任何情况下，您都不能超过亚马逊 Web Services 账户允许的最大请求速率 AWS 区域。如果请求超过最大速率，您将收到一个错误，并且系统会对您的 Amazon Web Services 账户的进一步调用执行临时节流操作。在限制期间，您与 CodeCommit 的连接会变慢，并且可能失败。

**可能的修复方法：**采取措施减少连接或呼叫的数量， CodeCommit 或者分散请求的数量。可考虑采用的一些方法：
+ **在请求中实现抖动，尤其是在定期轮询请求中**

  如果您有一个 CodeCommit 定期轮询的应用程序，并且该应用程序在多个 Amazon EC2 实例上运行，请引入抖动（随机延迟），这样不同的 Amazon EC2 实例就不会在同一秒钟进行轮询。我们建议使用 0 到 59 秒的随机数值，以便在 1 分钟的时间范围内均匀分布轮询机制。
+ **使用基于事件的架构而不是轮询**

  使用基于事件的架构而不是轮询，以便仅在事件发生时进行调用。[考虑使用 CloudWatch 事件通知来AWS CodeCommit 触发您的工作流程。](https://docs.aws.amazon.com/AmazonCloudWatch/latest/events/EventTypes.html#codecommit_event_type)
+ **为 APIs 自动 Git 操作实施错误重试和指数级退缩**

  错误重试和指数回退可帮助限制调用速率。每个 AWS 开发工具包均实施自动重试逻辑和指数回退算法。对于自动 Git 推送和 Git 拉取，您可能需要实施自己的重试逻辑。有关更多信息，请参阅中的[错误重试和指数退缩](https://docs.aws.amazon.com/general/latest/gr/api-retries.html)。 AWS
+ **在 Supp CodeCommit ort Center 申请增加服务配额 AWS **

  要接收提高服务限制，您必须确认您已遵循此处提供的建议，包括实施错误重试或指数回退方法。在申请中，您还必须提供受限制问题 AWS 区域影响的 Amazon Web Services 账户和时间范围。



# 对配置错误进行故障排除，以及 AWS CodeCommit
<a name="troubleshooting-cf"></a>

以下信息可以帮助您解决连接 AWS CodeCommit 存储库时可能出现的配置错误。

**Topics**
+ [配置错误：无法在 macOS 上配置 AWS CLI 凭据](#troubleshooting-cf1)

## 配置错误：无法在 macOS 上配置 AWS CLI 凭据
<a name="troubleshooting-cf1"></a>

**问题：**当你运行`aws configure`配置时 AWS CLI，你会看到一条`ConfigParseError`消息。

**可能的修复措施：**导致该错误的最常见原因是凭证文件已存在。请浏览到 \$1/.aws，查找名为 `credentials` 的文件。重命名或删除该文件，然后再次运行 **aws configure**。

# 控制台错误疑难解答和 AWS CodeCommit
<a name="troubleshooting-cs"></a>

以下信息可帮助您排查在使用 AWS CodeCommit 存储库时可能出现的控制台错误。

**Topics**
+ [访问错误：控制台拒绝访问 CodeCommit 存储库的加密密钥或 AWS CLI](#troubleshooting-ae3)
+ [加密错误：无法解密存储库](#troubleshooting-ck1)
+ [控制台错误：无法从控制台浏览 CodeCommit 存储库中的代码](#troubleshooting-cs1)
+ [显示错误：无法查看文件或文件之间的对比](#troubleshooting-dd1)

## 访问错误：控制台拒绝访问 CodeCommit 存储库的加密密钥或 AWS CLI
<a name="troubleshooting-ae3"></a>

**问题：**当您尝试 CodeCommit 从控制台或访问时 AWS CLI，会出现一条错误消息，其中包含短语`EncryptionKeyAccessDeniedException`或`User is not authorized for the KMS default key for CodeCommit 'aws/codecommit' in your account`。

**可能的修复方法：**导致此错误的最常见原因是您的 Amazon Web Services 账户未订阅 AWS Key Management Service，这是必需 CodeCommit的。打开 AWS KMS 控制台，选择**AWS 托管密钥**，然后选择**立即开始**。如果您看到一条消息说您当前未订阅该 AWS Key Management Service 服务，请按照该页面上的说明进行订阅。有关 CodeCommit 和的更多信息 AWS Key Management Service，请参阅[AWS KMS 和加密](encryption.md)。

## 加密错误：无法解密存储库
<a name="troubleshooting-ck1"></a>

**问题：**当您尝试从控制台或访问 CodeCommit 存储库时 AWS CLI，会出现一条包含该短语的错误消息`Repository can't be decrypted`。

**可能的修复：**此错误的最常见原因是用于加密和解密此存储库数据的密 AWS KMS 钥未激活或待删除。需要使用有效的密钥 AWS 托管式密钥 或客户管理的密钥 CodeCommit。 AWS Key Management Service打开 AWS KMS 控制台，选择**AWS 托管式密钥**或**客户管理的密钥**，并确保用于存储库的密钥存在于存储库 AWS 区域 所在的位置，并且其状态为 “**活动**”。有关 CodeCommit 和的更多信息 AWS Key Management Service，请参阅[AWS KMS 和加密](encryption.md)。

**重要**  
如果用于加密和解密存储库中数据的密钥已被永久删除或因其他原因无法访问，则使用该密钥加密的存储库中的数据无法访问。

## 控制台错误：无法从控制台浏览 CodeCommit 存储库中的代码
<a name="troubleshooting-cs1"></a>

**问题：**尝试在控制台中浏览存储库中的内容时，出现一条拒绝访问的错误消息。

**可能的修复：**此错误的最常见原因是，应用于您的 Amazon Web Services 账户的 IAM 策略拒绝了从 CodeCommit 控制台浏览代码所需的一项或多项权限。有关 CodeCommit 访问权限和浏览的更多信息，请参阅[的身份验证和访问控制 AWS CodeCommit](auth-and-access-control.md)。

## 显示错误：无法查看文件或文件之间的对比
<a name="troubleshooting-dd1"></a>

**问题：**当您尝试在 CodeCommit 控制台中查看文件或比较文件的两个版本时，会出现错误，指出文件或差异太大而无法显示。

**可能的修复措施：**出现此错误的最常见原因是，文件太大而无法显示，文件包含的一行或多行超过文件中单行的字符限制，或者文件的两个版本之间的差异超过了行限制。有关更多信息，请参阅 [配额](limits.md)。要查看文件或文件版本之间的差异，可以在首选 IDE 中在本地打开该文件，使用 Git diff 工具或运行 **git diff** 命令。

# 故障排除触发器和 AWS CodeCommit
<a name="troubleshooting-ti"></a>

以下信息可帮助您排查 AWS CodeCommit中的触发器问题。

**Topics**
+ [触发器错误：存储库触发器未按预期运行](#troubleshooting-ti1)

## 触发器错误：存储库触发器未按预期运行
<a name="troubleshooting-ti1"></a>

**问题：**为存储库配置的一个或多个触发器无法正常工作。

**可能的修复措施：**如果触发器的目标是 AWS Lambda 函数，请确保为该函数配置了允许 CodeCommit 访问的资源策略。

或者，编辑触发器并确保选中要触发操作的事件，并且触发器的分支包含要对操作做出响应的分支。尝试将触发器设置更改为 **All repository events** 和 **All branches**，然后测试触发器。有关更多信息，请参阅 [编辑存储库的触发器](how-to-notify-edit.md)。

## 启用调试
<a name="troubleshooting-debug"></a>

**问题：**我需要启用调试来获取有关我的存储库及 Git 如何执行命令的更多信息。

**可能的修复措施：**请尝试以下操作：

1. 在终端或命令提示符下，在本地计算机上运行以下命令，然后运行 Git 命令：

   在 Linux、macOS 或 Unix 上：

   ```
   export GIT_TRACE_PACKET=1
   export GIT_TRACE=1
   export GIT_CURL_VERBOSE=1
   ```

   在 Windows 上：

   ```
   set GIT_TRACE_PACKET=1
   set GIT_TRACE=1
   set GIT_CURL_VERBOSE=1
   ```
**注意**  
设置 `GIT_CURL_VERBOSE` 只对 HTTPS 连接有用。SSH 不使用 `libcurl` 库。

1. 要获取有关您的 Git 存储库的更多信息，我们建议您安装最新版本的 [git-sizer](https://github.com/github/git-sizer?tab=readme-ov-file#getting-started)。按照说明安装适合您的操作系统和环境的实用程序。安装完成后，在命令行或终端上，将目录更改为您的本地存储库，然后运行以下命令：

   ```
   git-sizer --verbose
   ```
**提示**  
考虑将命令的输出保存到文件中，以便在排查问题时可以轻松地与他人共享，随着时间的推移，这种作法的效果越好。