git代理密码中的转义@字符


88

我将git proxy配置为'http.proxy = http:// userId:pwd @ 123 @ipaddress:port',但是在克隆远程项目时,出现错误

Cloning into git...
error: Couldn't resolve proxy '123@ipaddress' while accessing http://git.kernel.org/pub/scm/git/git.git/info/refs

fatal: HTTP request failed

如何转义密码中的“ @”字符?

请注意:我无法更改密码。

Answers:


157

%40如果您要在代理url中传递密码,则尝试使用@符号()的URL编码值:

http.proxy=http://userId:pwd%40123@ipaddress:port

3
我正在尝试执行相同的技巧,但使用'git clone user:pwd%40123 @ ip:port ',它不起作用。所以我猜git在这种情况下不使用curl?
约瑟夫加文2012年

有趣的...不确定。在这种情况下,可能有必要尝试查看通过电线实际发送的内容。
约翰·韦尔登

1
这对我有帮助。您应该分别对名称和密码部分进行url编码。这将帮助您避免特殊字符的任何问题。例如,可能会有“:”符号,这也会导致问题。
Stalinko

2
当您在用户名中使用“ @”时,例如当您将电子邮件地址作为用户名时,这也很棒。
ramdesh

非常感谢您经过两天的努力解决了我的问题...真的很难找到导致这种问题的原因。
lleiou

61

注意(2013年11月)

正确的解决方案是对url(尤其是密码中的任何特殊字符)进行编码。
.netrc下文提到的是仅用于远程回购网址,而不是用来解决代理表示远程回购网址。

对于所述编码,请参阅“百分比编码”:

百分比编码(也称为URL编码)是一种在某些情况下在统一资源标识符(URI)中对信息进行编码的机制。尽管它被称为URL编码,但实际上,它更普遍地用于主要的统一资源标识符(URI)集,该集合包括统一资源定位符(URL)和统一资源名称(URN)。这样,它还用于准备application / x-www-form-urlencoded媒体类型的数据,这在HTTP请求中提交HTML 表单数据时经常使用。

百分比编码后的保留字符:

!   #   $    &   '   (   )   *   +   ,   /   :   ;   =   ?   @   [   ]
%21 %23 %24 %26 %27 %28 %29 %2A %2B %2C %2F %3A %3B %3D %3F %40 %5B %5D

原始答案(2011年5月)

两条评论:

  • 拥有通过http(不是https)访问的服务器的密码很奇怪。客户端与服务器之间的通信过程中未对密码进行加密;

  • 您可以在中设置.netrc(或_netrc针对Windows)$HOME以下内容

    机器ipaddress:port
    登录用户名
    密码pwd @

Git bbehind在场景中使用的curl可以很好地处理编码,@或者不可以@


感谢您的答复。服务器是网络驱动器,只有我自己和其他2个开发人员可以使用。因此,我认为无需加密。我会尝试使用netrc。
Karthik

@Karthik:这将使您可以简单地使用:http://123@ipaddress:port/...作为克隆地址,而无需添加用户和密码信息。
VonC

7

URL编码任何不寻常的字符。

网址代码列表。

@ character is %40

在我的git配置文件中,我已经编码了“仅”用户名,例如:

https://myemail%40gmail.com@myrepo.org/api.git


5

例如,您的密码存储在环境变量GIT_PASSWORD用户名-中GIT_USERNAME,然后:

git clone http://${GIT_USERNAME}:$(echo -n $GIT_PASSWORD | hexdump -v -e '"x" 1/1 "%02X"' | tr x %)@repository.git

解释: echo -n $GIT_PASSWORD | hexdump -v -e '"x" 1/1 "%02X"' | tr x %

  1. 打印密码:$GIT_REPOSITORY<-hello
  2. 将'hello'转换为十六进制:hello<-x68x65x6Cx6Cx6F
  3. 将每个“ x”更改为“%”:x68x65x6Cx6Cx6F<-%68%65%6C%6C%6F

By using our site, you acknowledge that you have read and understand our Cookie Policy and Privacy Policy.
Licensed under cc by-sa 3.0 with attribution required.