Git proxy şifresinde Escape @ karakteri


90

Git proxy yapılandırmam 'http.proxy = http: // userId: pwd @ 123 @ipaddress: port' olarak var ama uzak bir projeyi klonlarken şu hata alıyorum

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

Şifrede '@' karakterinden nasıl kaçılır?

Pls not: Şifreyi değiştiremiyorum.

Yanıtlar:


161

%40Parolayı proxy url'sinde geçiriyorsanız , @ sembolünün ( ) URL Kodlanmış değerini kullanmayı deneyeceğim :

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

3
Aynı numarayı yapmaya çalışıyorum ama 'git clone user: pwd% 40123 @ ip: port ' ile çalışmıyor. Sanırım git bu durumda curl kullanmıyor?
Joseph Garvin

ilginç ... emin değilim. Muhtemelen bu durumda kabloya gerçekte neyin gönderildiğini görmeye değer.
John Weldon

1
Bu bana yardımcı oldu. Hem ad hem de şifre bölümlerini ayrı ayrı url kodlamalısınız. Bu, özel karakterlerle ilgili herhangi bir sorundan kaçınmanıza yardımcı olacaktır. Örneğin, sorunlara da yol açacak ":" işareti olabilir.
Stalinko

2
Bu aynı zamanda kullanıcı adında '@' olması için de harikadır, örneğin kullanıcı adı olarak e-posta adresleriniz olduğunda.
ramdesh

İki günlük mücadelenin ardından sorunumu çözdüğünüz için çok teşekkür ederim ... bu tür bir sorunun nedenini bulmak gerçekten zor.
lleiou

62

Not (Kasım 2013)

URL'yi kodlamak (özellikle bir şifredeki herhangi bir özel karakter) doğru çözümdür.
Aşağıda .netrcbelirtilenler, söz konusu uzak repo url'sini çözmek için kullanılan proxy için değil, yalnızca uzak repo url'si içindir.

Söz konusu kodlama için bkz. " Yüzde kodlama ":

URL kodlaması olarak da bilinen yüzde kodlama, belirli koşullar altında bir Tekdüzen Kaynak Tanımlayıcı (URI) içindeki bilgileri kodlamak için bir mekanizmadır . URL kodlaması olarak bilinmesine rağmen, aslında, hem Tekdüzen Kaynak Konumlandırıcı (URL) hem de Tekdüzen Kaynak Adı (URN) içeren ana Tekdüzen Kaynak Tanımlayıcı (URI) kümesinde daha genel olarak kullanılmaktadır . Bu şekilde, aynı zamanda, uygulama / x-www-form-urlencoded verileri hazırlanmasında kullanılan ortam türü sıklıkta sunulması kullanılır, HTML şekilde veri HTTP isteklerinde .

Yüzde kodlamadan sonra ayrılmış karakterler:

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

Orijinal cevap (Mayıs 2011)

İki yorum:

  • http (https değil) ile erişilen bir sunucu için şifreye sahip olmak ... garip. İstemci ve sunucu arasındaki iletişim sırasında parola şifrelenmez;

  • aşağıdaki içeriğe sahip bir .netrc(veya _netrcWindows için) $HOMEkurabilirsiniz

    makine ipadresi: bağlantı noktası
    login userId
    şifre pwd @

Sahnenin arkasında Git tarafından kullanılan curl, kodlamayı gayet iyi idare eder @veya olmaz @.


Cevaplarınız için teşekkürler. Sunucu, yalnızca benim ve diğer 2 geliştiricinin kullanacağı ağ sürücüsüydü. Bu yüzden şifrelemeye gerek olmadığını düşünüyorum. Ve bir ara netrc kullanmayı deneyeceğim.
Karthik

@Karthik: bu, http://123@ipaddress:port/...kullanıcı ve parola bilgisi eklemenize gerek kalmadan, basitçe bir klonlama adresi olarak kullanmanıza olanak sağlar .
VonC


5

Örneğin, şifreniz ortam değişkeninde GIT_PASSWORD, kullanıcı adı - GIT_USERNAME, ardından:

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

Açıklaması: echo -n $GIT_PASSWORD | hexdump -v -e '"x" 1/1 "%02X"' | tr x %

  1. Şifre yazdır: $GIT_PASSWORD<-hello
  2. Merhaba 'yi hex'e çevirin: hello<-x68x65x6Cx6Cx6F
  3. Her bir 'x'i'% 'olarak değiştirin: x68x65x6Cx6Cx6F<-%68%65%6C%6C%6F

Açıklamanın ilk noktasında, $ GIT_REPOSITORY yerine $ GIT_ PASSWORD kullanmak mı istediniz?
Ninju Bohra

1

Sen zorunda yüzde kodlamasını | özel karakterleri kodlayın . Örneğin bunun yerine:

http://foo:B@r@http-gateway.domain.org:80

bunu yaz

http://foo:B%40r@http-gateway.domain.org:80

Yani @ile değiştirilir %40.

Sitemizi kullandığınızda şunları okuyup anladığınızı kabul etmiş olursunuz: Çerez Politikası ve Gizlilik Politikası.
Licensed under cc by-sa 3.0 with attribution required.