Заставить Git работать с прокси-сервером - не работает с «Тайм-аут запроса»


918

Как мне заставить Git использовать прокси-сервер?

Мне нужно проверить код с сервера Git, но он показывает «Время ожидания запроса» каждый раз. Как мне обойти это?

Кроме того, как я могу установить прокси-сервер?


Не будет ли это элементом конфигурации git-клиента? Единственный аспект этого, который выглядит как включающий cmd.exe, заключается в том, что клиент git может позволить вам указать прокси в переменной environement.
Майкл Берр

Я отредактировал исходный вопрос, чтобы удалить все ссылки на Windows, так как эта проблема является специфической для git.
PlagueHammer

3
Обратите внимание, что вы сможете настроить прокси для URL-адреса git-репо!
VonC


3
Большинство ответов на этот вопрос касаются HTTP прокси. Если у вас есть прокси-сервер SOCKS, посмотрите этот вопрос для протоколов HTTP / S , а этот - для протокола git: //.
пользователь

Ответы:


1634

Команда для использования:

git config --global http.proxy http://proxyuser:proxypwd@proxy.server.com:8080
  • изменить proxyuserна свой прокси-пользователь
  • изменить proxypwdна свой пароль прокси
  • изменить proxy.server.comна URL вашего прокси-сервера
  • перейдите 8080на прокси-порт, настроенный на вашем прокси-сервере

Обратите внимание, что это работает как для репозиториев http, так и для https.

Если вы в любое время решите сбросить этот прокси и работать без прокси:

Команда для использования:

git config --global --unset http.proxy

Наконец, чтобы проверить текущий установленный прокси:

git config --global --get http.proxy

15
Спасибо Салим. Мой работал без прокси-пользователя: proxypwd в URL.
Kwex

11
Спасибо, парни. Для меня это была аутентификация на основе NTLM, и просто обновление моего .gitconfig не работало :(. Поэтому мне нужно было получить CNTLM, использующий аутентификацию NTLM. Все, что мне нужно было сделать, это указать свой CNTLM на прокси-сервере моей сети, а затем указать мое программное обеспечение. менеджер обновлений (например, yum, apt-get или ssh) для локального прокси. В случае таких операций git, как клон, вытащить http.proxy был мой локально настроенный прокси с локальным сервером.
Mayur Nagekar

9
Здравствуйте, как я могу установить proxypass, если он имеет символ "@"? Я знаю, что должен отпустить этого персонажа, но я не знаю как ... Спасибо
patricK

13
@patricK Вы можете использовать %40в качестве замены @строки имени пользователя / пароля, хотя я сам не проверял это. Надеюсь, поможет. :-)
Сурав Гош

14
@patricK Я могу подтвердить, что использование% 40 в качестве замены @ работает. Кажется, если специальный символ не работает, вы должны попробовать URL кодирования его. Кодировки можно найти здесь: w3schools.com/tags/ref_urlencode.asp
Jon

133

Это работало для меня, в Windows XP за корпоративным брандмауэром.

Мне не нужно было устанавливать какой-либо локальный прокси или любое другое программное обеспечение, кроме git v1.771, с http://code.google.com/p/msysgit/downloads/list?can=3

$ git config --global http.proxy http://proxyuser:proxypwd@proxy.server.com:8080
$ git config --system http.sslcainfo /bin/curl-ca-bundle.crt
$ git remote add origin https://mygithubuser:mygithubpwd@github.com/repoUser/repoName.git
$ git push origin master

proxyuser = прокси-пользователь, которого я назначил нашим ИТ-отделом, в моем случае это тот же пользователь Windows, которого я использую для входа на свой ПК, пользователь Active Directory

proxypwd = пароль моего прокси-пользователя

proxy.server.com:8080 = имя и порт прокси-сервера, я получил его из Панели управления, Свойства обозревателя, Соединения, Кнопка настроек Lan, Кнопка Дополнительно в разделе Proxy Server, используйте имя сервера и порт в первой строке (http) ,

mygithubuser = пользователь, которого я использую для входа на github.com

mygithubpwd = пароль для моего пользователя github.com

repoUser = пользователь-владелец репо

repoName = название репо


2
Ура, спасибо! git config --global http.sslcainfo MY_NEW_CERTS_BUNDLE.crtплюс сертификаты, загруженные как описано в simplicidade.org/notes/archives/2011/06/… (благодаря: stackoverflow.com/a/7206627/98528 ) сделали это для меня!
akavel

3
Кажется, работает для меня, но git все еще не работает, когда я прошу его клонировать репозиторий, используя git://протокол.
Ajedi32

3
Пара разъяснений к информации pablolic, основанная на том, что у меня сработало: 1) Если proxyuser является логином Windows, оставьте домен AD, просто включите имя пользователя без домена; 2) Пробелы в proxypwd должны быть закодированы как "+". например, «Мой пароль» должен быть введен как «Мой + Пароль».
Саймон Тьюси

2
@ EdmundYeung99: Я бы предложил заменить символ @ на% 40. Не пробовал, но я считаю, что это стандартная кодировка URL.
Саймон Тьюси

2
@demongolem: я подозреваю, что вам может понадобиться URL-адрес для кодирования вашего пароля (еще не пробовал, это только обоснованное предположение). См. Столбец UrlEncoded в таблице в следующем ответе: stackoverflow.com/a/11236038/216440 В вашем случае это будет означать замену $ на% 24.
Саймон Тьюси

52

Задайте системную переменную с именем http_proxyсо значением ProxyServer:Port. Это самое простое решение. Соответственно, используйте https_proxyкак указано в комментариях daefu.

Установка gitproxy (как упоминает sleske) - это еще один вариант, но для этого требуется «команда», которая не так проста, как приведенное выше решение.

Ссылки: http://bardofschool.blogspot.com/2008/11/use-git-behind-proxy.html


10
Или используйте https_proxy, если вы подключаетесь к https-хранилищу.
Даэфу

1
@daefu: Не уверен, если вам нужно установить https_proxy. Я подключился к хранилищу https и выполнил первый шаг инструкций pablolic (то есть добавил http.proxy в файл конфигурации git). Это было все, что нужно для меня.
Саймон Тьюси

3
https_proxy был необходим для меня. Установка только http_proxy не позволила ему клонировать
репозиторий

@daefu +1 это также работает с вопросом о вдовах на github: stackoverflow.com/questions/16216176/…
blue-sky

4
@SimonTewsi @explunit Хотя настройка переменных среды http_proxyтребуется для URL-адресов HTTP и https_proxyтребуется для URL-адресов HTTPS. Кроме того, можно просто установить all_proxyдля всех URL-адресов. Смотрите ENVIRONMENTраздел в curl (1) . Однако при настройке параметров git-config http.proxyиспользуется как для URL-адресов HTTP, так и для HTTPS. Смотрите http.proxyв git-config (1) .
Сусам Пал

43

Если способ настройки прокси-сервера из командной строки не работает, вы, вероятно, можете просто отредактировать .gitconfig (в корне вашего профиля, который может скрываться как в C: \ Documents and Settings, так и на каком-то сетевом диске) и добавить это :

[http]
    proxy = http://username:password@proxy.at.your.org:8080

Тем не менее, YMMV охватывает только первый этап настройки командной строки. Возможно, вам придется изменить конфигурацию системного git, и я понятия не имею, где они это спрятали.


1
Msgstr "Возможно, вам придется изменить конфигурацию git системы". Нет, обычно нет. Конфигурация системы и пользователя объединены; Установка прокси в одном из двух должно быть достаточно.
Слеск

В моем случае он находится на моей машине с Windows в [git home] \ etc \ gitconfig - после редактирования он работает как шарм!
Бармалей Красная Звезда

Это особенно полезно, если командной строке не нравится ваш пароль из-за специальных символов.
Происхождение

37

В качестве альтернативы использованию git config --global http.proxy address:portвы можете установить прокси в командной строке:

git -c "http.proxy=address:port" clone https://...

Преимущество в том, что прокси не установлен постоянно. Под Bash вы можете установить псевдоним:

alias git-proxy='git -c "http.proxy=address:port"'

22

Если вы используете Ubuntu, сделайте следующее ...

Шаг 1: Установите штопор

$ sudo apt-get install corkscrew

Шаг 2: Напишите скрипт с именем git-proxy.sh и добавьте следующее

#!/bin/sh

exec corkscrew <name of proxy server> <port> $*

# <name_of_proxy_server> and <port> are the ip address and port of the server
# e.g. exec corkscrew 192.168.0.1 808 $*

Шаг 3: Сделайте скрипт исполняемым

$ chmod +x git-proxy.sh

Шаг 4: Настройте прокси-команду для GIT, установив переменную среды

$ export GIT_PROXY_COMMAND="/<path>/git-proxy.sh"

Теперь используйте команды git, такие как

git clone git://git.kernel.org/pub/scm/linux/kernel/git/torvalds/linux.git

Вы, вероятно, должны использовать "$@"вместо $*. Смотрите руководство по вашей оболочке для более подробной информации.
Гинек -Пичи- Выходил

15

Столкнулся с той же проблемой из-за нескольких .gitconfigфайлов в Windows, следуя приведенным ниже инструкциям, чтобы исправить одно и то же:

Шаг 1: Откройте Git BASH

Шаг 2: Ищите .gitconfig, выполнив следующую команду:

git config --list --global --show-origin

Шаг 3: Скопируйте ниже содержание в .gitconfig:

[http]
    proxy = http://YOUR_PROXY_USERNAME:YOUR_PROXY_PASSWORD@YOUR.PROXY.SERVER:YOUR.PROXY.SERVER.PORT
    sslverify = false
[https]
    proxy = http://YOUR_PROXY_USERNAME:YOUR_PROXY_PASSWORD@YOUR.PROXY.SERVER:YOUR.PROXY.SERVER.PORT
    sslverify = false
[url "http://github.com/"]
    insteadOf = git://github.com/

[user]
    name = Arpit Aggarwal
    email = aggarwalarpit.89@gmail.com

12

Попробуйте поместить в файл ~ / .gitconfig следующее:

[http]
    proxy = http://proxy:8080
[https]
    proxy = http://proxy:8080
[url "https://"]
    insteadOf = git://

1
Я перепробовал все вещи выше. Только когда я добавил запись https, перечисленную здесь, я смог работать.
Брент Фишер

11

Для протокола git (git: // ...) установите socat и напишите такой скрипт:

#!/bin/sh

exec socat - socks4:your.company.com:$1:$2

сделайте его исполняемым, поместите его в свой путь и в свой ~/.gitconfigнабор core.gitproxyк имени этого скрипта.


Работает для окон с SOCAT Cygwin тоже. использованиеsocat STDIO PROXY:%proxy%:%1:%2,proxyport=%PROXYPORT%
davenpcj

1
Можно использовать, set GIT_PROXY_COMMAND=path\to\scriptчтобы GIT использовал прокси, не вмешиваясь в git config.
davenpcj

Да! Наконец-то правильный намек! Мне также требовалась аутентификация: exec socat STDIO PROXY: <proxy>: $ 1: $ 2, proxyport = <порт>, proxyauth = <пользователь>: <passwd> Найдено здесь: gist.github.com/sit/49288
Иоахим

11

Есть кое-что, что я заметил и хочу поделиться здесь:

git config --global http.proxy http://<proxy address>:<port number>

Приведенный выше метод не будет работать для URL-адресов ssh (т. Е. git@github.com:<user name>/<project name>.git):

git clone git@github.com:<user name>/<project name>.git // will not use the http proxy

И все не изменится, если мы установим SSH через порт HTTPS ( https://help.github.com/en/articles/using-ssh-over-the-https-port ), потому что он только меняет порт (по умолчанию 22 ) соединение SSH соединяется с.

(Не носитель английского языка, пожалуйста, уточните мои слова, если это необходимо)


7

Я работаю на Windows XP на работе (штат / правительство), поэтому я провел исследование и нашел это здесь, и это сработало для меня. Надеюсь это поможет :)

Переменная среды http_proxy

Если вы используете прокси-сервер или брандмауэр, вам может потребоваться установить переменную среды http_proxy, чтобы получить доступ к некоторому URL из командной строки. Пример: установка ppm для perl или применение rpm в linux, обновление ubuntu

Задайте для переменной http_proxy имя хоста или IP-адрес прокси-сервера: http_proxy = http: // [proxy.example.org]

Если прокси-серверу требуются имя пользователя и пароль, включите их в следующую форму: http_proxy = http: // [username: password@proxy.example.org]

Если прокси-сервер использует порт, отличный от 80, укажите номер порта: http_proxy = http: // [username: password@proxy.example.org: 8080]

Windows XP

  1. Откройте панель управления и щелкните значок «Система».
  2. На вкладке «Дополнительно» нажмите «Переменные среды».
  3. Нажмите «Создать» на панели «Системные переменные».
  4. Добавьте http_proxy с соответствующей информацией о прокси (см. Примеры выше).

Linux, Solaris или HP-UX

Установите переменную среды http_proxy с помощью команды, специфичной для вашей оболочки (например, set или export). Чтобы сделать это изменение постоянным, добавьте команду в соответствующий файл профиля для оболочки. Например, в bash добавьте строку, подобную следующей, в ваш файл .bash_profile или .bashrc:

  1. http_proxy = http: // [имя пользователя: пароль @ имя хоста: порт];
  2. экспорт $ http_proxy

tanx -> :) C: \ Users \ AT> echo% https_proxy% 172.20.4.55:808
qasem

7

В дополнение к этим ответам я счел полезным рассмотреть следующие 2 момента:

Возможно, потребуется применить схему аутентификации:

[http]
    # https://github.com/git/git/blob/master/Documentation/config.txt
    proxyAuthMethod = anyauth|basic|digest|negotiate|ntlm

Также, как правило, со схемой аутентификации NTLM, может потребоваться явно предоставить домен AD.

В git bash:

echo %userdomain%

И обновите http.proxy соответственно:

git config --global http.proxy http://DOMAIN\\proxyuser:proxypwd@proxy.server.com:8080

В любом случае, расследованию может помочь добавление журналов CURL:

export GIT_CURL_VERBOSE=1

Мне нужно было добавить proxyAuthMethod с помощью git config --global http.proxyAuthMethod basic. Git gersion 2.8.3 не отправлял никакой аутентификации, пока я не установил этот параметр конфигурации.
HeatfanJohn

5

Если у вас установлены и настроены tsocks или proxychain , вы можете

$ tsocks git clone <you_repository>

или

$ proxychains git clone <you_repository>

чтобы сделать его короче, я создал ссылку символа /usr/bin/pдля proxychains, так что я могу использовать его , как это

p git clone <you_repository>

и я могу использовать его для прокси любой команды,

p <cmd-need-be-proxied>

кстати, proxychains давно не обновляется, вы можете попробовать proxychians-ng


4

Настройка git proxy на терминале

если

  • вы не хотите устанавливать прокси для каждого из ваших git-проектов вручную, один за другим
  • всегда хочу использовать один и тот же прокси для всех ваших проектов

Установите глобально один раз

git config --global http.proxy username:password@proxy_url:proxy_port
git config --global https.proxy username:password@proxy_url:proxy_port

если вы хотите установить прокси только для одного проекта git (могут быть ситуации, когда вы можете вообще не захотеть использовать один и тот же прокси или любой прокси для некоторых соединений git)

//go to project root
cd /bla_bla/project_root
//set proxy for both http and https
git config http.proxy username:password@proxy_url:proxy_port
git config https.proxy username:password@proxy_url:proxy_port

если вы хотите отобразить текущие настройки прокси

git config --list 

если вы хотите удалить прокси глобально

git config --global --unset http.proxy
git config --global --unset https.proxy

если вы хотите удалить прокси только для одного git root

//go to project root
cd /bla-bla/project_root
git config --unset http.proxy
git config --unset https.proxy

3

вот настройка прокси

git config --global http.proxy http://<username>:<pass>@<ip>:<port>
git config --global https.proxy http://<username>:<pass>@<ip>:<port>

3

Я следовал большинству ответов, которые были рекомендованы здесь. Сначала я получил следующую ошибку:

неустранимый: невозможно получить доступ к https://github.com/folder/sample.git/ : schannel: next InitializeSecurityContext не удалось: неизвестная ошибка (0x80092012) - функция отзыва не смогла проверить отзыв сертификата.

Затем я попробовал следующую команду @Salim Hamidi

git config --global http.proxy http://proxyuser:proxypwd@proxy.server.com:8080

Но я получил следующую ошибку:

Неустранимый: невозможно получить доступ к https://github.com/folder/sample.git/ : Получен HTTP-код 407 от прокси-сервера после CONNECT

Это может произойти, если прокси-сервер не может проверить сертификат SSL. Поэтому мы хотим убедиться, что проверка ssl отключена (не рекомендуется для ненадежных сайтов), поэтому я сделал следующие шаги, которые были рекомендованы @Arpit, но с небольшими изменениями:

1. Сначала убедитесь, что удалили все предыдущие настройки прокси:

git config --global --unset http.proxy

2. Затем перечислите и получите содержимое gitconfig.

git config --list --show-origin

3.Последнее обновление содержимого файла gitconfig, как показано ниже:

[http]
sslCAInfo = C:/yourfolder/AppData/Local/Programs/Git/mingw64/ssl/certs/ca-bundle.crt
sslBackend = schannel
proxy = http://proxyuser:proxypwd@proxy.server.com:8080
sslverify = false
[https]
proxy = http://proxyuser:proxypwd@proxy.server.com:8080
sslverify = false

3

Я перепробовал все приведенные выше ответы, и у меня ничего не получалось, так как были проблемы с кодировкой пароля прокси.

Эта команда сработала:

git config --global http.proxy http://username@proxy.example.com:PortNumber 

Не вводите пароль в вашей команде. Он будет динамически запрашивать при попытке подключиться к любому git-репо.


Спасибо, это сработало для меня. Хотя настройкой git config должен быть http.proxy
ochhii

Имя пользователя не достаточно. Пароль также требуется.
Динит

используйте этот код {git config --global http.proxy proxyuser: proxypwd@proxy.server.com: 8080 }
Dinith

2

Для пользователей Windows: если git configили set http_proxy=не работает, этот ответ может помочь:

заменить git://протокол репозиторий с http://. Обратите внимание, вы должны будете установить http_proxyпервое, в любом случае.


0

После того, как я без устали пробовал каждое решение на этой странице, я решил использовать вместо него ключ SSH!

  1. Open Git Bash
  2. $ ssh-keygen.exe -t rsa -C
  3. Откройте своего провайдера Git (Github, Bitbucket и т. Д.)
  4. Добавьте копию содержимого файла id_rsa.pub на страницу ввода провайдера Git (проверьте ваш профиль)
Используя наш сайт, вы подтверждаете, что прочитали и поняли нашу Политику в отношении файлов cookie и Политику конфиденциальности.
Licensed under cc by-sa 3.0 with attribution required.