Початок роботи Git з проксі-сервером - не вдається з "Запити час вичерпано"


918

Як змусити Git використовувати проксі-сервер?

Мені потрібно перевірити код з сервера Git, але він показує "Запит часу вичерпано" кожен раз. Як мені це обійти?

Як же я можу встановити проксі-сервер?


Це не був би елемент налаштування клієнта git? Єдиний аспект цього, який, здається, передбачає cmd.exe, полягає в тому, що клієнт git може дозволити вам вказати проксі в змінній оточення.
Майкл Берр

Я відредагував оригінальне запитання, щоб видалити всі посилання Windows, оскільки ця проблема сама по собі є git.
PlagueHammer



3
Більшість відповідей у ​​цьому питанні стосуються проксі-серверів HTTP. Якщо у вас є проксі-сервер SOCKS, перегляньте це питання для протоколів HTTP / S , а це - для протоколу git: //.
користувач

Відповіді:


1634

Команда для використання:

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

Зауважте, що це працює як для http, так і для https repos.

Якщо ви вирішите будь-коли скинути цей проксі і працювати без проксі:

Команда для використання:

git config --global --unset http.proxy

Нарешті, щоб перевірити поточно встановлений проксі:

git config --global --get http.proxy

15
Спасибі Салім. Шахта працювала без proxyuser: proxypwd в URL-адресі.
Квекс

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

9
Привіт, як я можу встановити proxypass, якщо він має "@" характер? Я знаю, що я повинен налякати цього персонажа, але не знаю, як .. Дякую
patricK

13
@patricK Ви можете використовувати %40як заміну для @рядка в ім’я користувача / пароля, хоча я сам цього не перевіряв. Сподіваюся, це допомагає. :-)
Sourav Ghosh

14
@patricK Я можу підтвердити, що використання% 40 в якості заміни для @ працює. Здається, якщо спеціальний символ не працює, ви повинні спробувати його кодування. Кодування знайдені тут: 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 = ім'я проксі і порт проксі, я отримав його з панелі керування, параметрів Інтернету, підключень, кнопки "Налаштування", додаткової кнопки в розділі проксі-сервера, використовуйте ім'я сервера та порт у першому (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
Кілька роз’яснень інформації паблоку, виходячи з того, що для мене працювало: 1) Якщо проксіузер є входом у систему 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як в коментарях зазначено даефу.

Налаштування gitproxy (як згадує sleske) - це інший варіант, але для цього потрібна "команда", яка не є такою простою, як вищезазначене рішення.

Посилання: http://bardofschool.blogspot.com/2008/11/use-git-behind-proxy.html


10
Або використовуйте "https_proxy", якщо ви підключаєтесь до https-сховища.
daefu

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

3
Для мене потрібно було https_proxy. Якщо встановити лише http_proxy, це не дозволило йому клонувати
репортаж

@daefu +1 це також працює з вдовами github - пов'язане питання: stackoverflow.com/questions/16216176/…
blue-sky

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

43

Якщо спосіб налаштування вашого проксі-сервера в командному рядку не працює, ви, ймовірно, можете просто відредагувати .gitconfig (у корені вашого профілю, який може ховатися як у C: \ Документах та налаштуваннях, так і на деякому мережевому диску) та додати це :

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

YMMV, однак, це стосується лише першого кроку конфігурації командного рядка. Можливо, вам доведеться також редагувати конфігурацію системи git, і я не знаю, де вони це сховали.


1
"Можливо, вам також доведеться редагувати конфігурацію системного git". Ні, зазвичай ні. Система та конфігурація користувача поєднуються; встановлення проксі в одному з двох має бути достатньо.
sleske

У моєму випадку він розташований на моїй машині Windows у [git home] \ etc \ gitconfig - після редагування це працює як шарм!
Barmaley Red Star

Це особливо корисно, якщо командний рядок не любить ваш пароль через спеціальні символи.
Походження

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

Напевно, ви повинні використовувати "$@"замість цього $*. Детальнішу інформацію див. У посібнику з оболонкою.
Hynek -Pichi- Vychodil

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до імені цього сценарію.


Працює і для вікон із cygwin's SOCAT. використання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 = <port>, proxyauth = <user>: <passwd> Знайдено тут: gist.github.com/sit/49288
Йоахім

11

Тут щось я помітив і хочу поділитися:

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

Наведений вище метод не працюватиме для ssh URL-адрес (тобто 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 на роботі (state / gov), тому я зробив свої дослідження і виявив це тут, і це працювало на мене. Сподіваюся, це допомагає :)

Змінна середовище http_proxy

Якщо ви використовуєте проксі-сервер або брандмауер, можливо, вам доведеться встановити змінну середовища http_proxy, щоб отримати доступ до деякого URL-адреси з командного рядка. Приклад: Установка ppm для perl або застосування rpm в linux, оновлення ubuntu

Встановіть змінну http_proxy з ім'ям хосту або IP-адресою проксі-сервера: http_proxy = http: // [proxy.example.org]

Якщо проксі-сервер вимагає імені користувача та пароля, включіть їх у такій формі: http_proxy = http: // [ім'я користувача: password@proxy.example.org]

Якщо проксі-сервер використовує порт, відмінний від 80, включіть номер порту: http_proxy = http: // [ім'я користувача: password@proxy.example.org: 8080]

Windows XP

  1. Відкрийте панель керування та натисніть значок системи.
  2. На вкладці Додатково натисніть на Змінні середовища.
  3. Натисніть кнопку Створити на панелі системних змінних.
  4. Додайте http_proxy з відповідною інформацією про проксі (див. Приклади вище).

Linux, Solaris або HP-UX

Встановіть змінну середовища http_proxy за допомогою команди, специфічної для вашої оболонки (наприклад, встановити або експортувати). Щоб зробити цю зміну стійкою, додайте команду у відповідний файл профілю для оболонки. Наприклад, у 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

На додачу до цих відповідей, я вважаю корисним врахувати ці два пункти:

Можливо, потрібно застосувати схему аутентифікації:

[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 не надсилав автентифікацію, поки я не встановив цей параметр config.
HeatfanJohn

5

Якщо у вас встановлені та налаштовані tsocks або proxychains , ви можете

$ 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-проксі на термінал

якщо

  • ви не хочете встановлювати проксі для кожного зі своїх 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

//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 repo.


Дякую, це працювало для мене. Хоча налаштування 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://протокол сховища git на http://. Зауважте, вам доведеться все-таки встановити http_proxyперше.


0

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

  1. Відкрийте 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.