使用携带用户名密码的URL无法访问CodeCommit仓库是什么原因?
问题原因说明
这个报错不是权限问题,是密码包含URL特殊字符导致的Git URL解析错误。
报错原理
Git解析带凭证的HTTPS URL时,会把@符号作为账号密码凭证段和仓库域名段的分隔符。如果你的密码里包含@、:这类URL保留字符,Git会把密码中的@误判为分隔符,将@后的内容错当成端口字段解析,就会抛出Port number ended with 'c'这类端口格式错误。
其他账号可以正常使用的原因是对应账号的密码没有包含这类需要转义的特殊字符,URL可以被正常解析。
解决方法
对密码中的特殊字符做URL编码后再拼接进URL,常见特殊字符编码对应关系如下:
@编码为%40:编码为%3A/编码为%2F?编码为%3F#编码为%23&编码为%26=编码为%3D
示例:如果原密码为
test@pass123,编码后为test%40pass123,替换后的克隆命令为:git clone https://username:test%40pass123@git-codecommit.eu-west-1.amazonaws.com/v1/repos/sample-repo不在克隆URL中携带密码,仅保留用户名,执行命令后按终端提示输入密码即可避免转义问题:
git clone https://username@git-codecommit.eu-west-1.amazonaws.com/v1/repos/sample-repo提前将CodeCommit凭证存入本地Git凭证管理器,后续克隆、推拉代码无需手动输入凭证,也不会出现特殊字符解析问题。
内容的提问来源于stack exchange,提问作者Naeem
相关产品推荐
相关产品推荐

