Символ Escape @в git прокси-пароле

У меня есть git proxy config как 'http.proxy = http://userId: pwd @123 @ipaddress: port', но при клонировании удаленного проекта я получаю ошибку как

Cloning into git...
error: Couldn't resolve proxy '[email protected]' while accessing http://git.kernel.org/pub/scm/git/git.git/info/refs

fatal: HTTP request failed

Как избежать символа '@' в пароле?

Примечание: я не могу изменить пароль.

Ответ 1

Я бы попытался использовать URL-кодированное значение символа @, если вы передаете пароль в URL-адресе прокси-сервера:

http.proxy=http://userId:pwd%[email protected]:port

Ответ 2

Примечание (ноябрь 2013 г.)

Кодирование URL (особенно любого специального символа в пароле) является правильным решением.
.netrc, упомянутый ниже, предназначен только для удаленного URL-адреса репо, а не для прокси-сервера, используемого для разрешения указанного удаленного URL-адреса репо.

Для указанной кодировки см. " Percent-encoding":

Процент кодирования, также известный как URL encoding, является механизмом кодирования информации в Uniform Resource Identifier (URI) при определенных обстоятельствах. Хотя он известен как кодировка URL, он фактически используется в основном в основном Uniform Resource Identifier (URI), который включает в себя как Uniform Resource Locator (URL) и Uniform Resource Name (URN), Таким образом, он также используется при подготовке данных типа application/x-www-form-urlencoded , что часто используется в представление HTML form данные в HTTP.

Зарезервированные символы после процентного кодирования:

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

Оригинальный ответ (май 2011 г.)

Два комментария:

  • имеющий пароль для сервера, к которому обращается http (не https), является... странным. Пароль не зашифрован во время обмена данными между клиентом и сервером;

  • вы можете настроить .netrc (или _netrc для Windows) в $HOME со следующим содержимым

    machine ipaddress:port
    login userId
    password [email protected]

Корректор, используемый Git для сцены, будет обрабатывать кодировку только штрафом, @ или no @.

Ответ 3

URL кодируют любые необычные символы.

Список URL-кодов.

@ character is %40

В моем файле конфигурации git я закодировал "просто" имя пользователя, например:

https://myemail%[email protected]/api.git

Ответ 4

Например, ваш пароль хранится в переменной среды 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 % echo -n $GIT_PASSWORD | hexdump -v -e '"x" 1/1 "%02X"' | tr x %

  1. Напечатать пароль: $GIT_REPOSITORY <- hello
  2. Преобразовать 'привет' в шестнадцатеричный код: hello <- x68x65x6Cx6Cx6F
  3. Измените каждое "x" на "%": x68x65x6Cx6Cx6F <- %68%65%6C%6C%6F