Як витягнути з сховища Git через проксі-сервер HTTP?


491

Примітка: хоча описаний випадок використання стосується використання підмодулів в рамках проекту, те ж саме стосується звичайного git cloneсховища через HTTP.

У мене проект під контролем Git. Я хочу додати підмодуль:

git submodule add http://github.com/jscruggs/metric_fu.git vendor/plugins/metric_fu

Але я отримую

...
got 1b0313f016d98e556396c91d08127c59722762d0
got 4c42d44a9221209293e5f3eb7e662a1571b09421
got b0d6414e3ca5c2fb4b95b7712c7edbf7d2becac7
error: Unable to find abc07fcf79aebed56497e3894c6c3c06046f913a under http://github.com/jscruggs/metri...
Cannot obtain needed commit abc07fcf79aebed56497e3894c6c3c06046f913a
while processing commit ee576543b3a0820cc966cc10cc41e6ffb3415658.
fatal: Fetch failed.
Clone of 'http://github.com/jscruggs/metric_fu.git' into submodule path 'vendor/plugins/metric_fu'

У мене налаштовано HTTP_PROXY:

c:\project> echo %HTTP_PROXY%
http://proxy.mycompany:80

У мене навіть є глобальний параметр Git для http-проксі:

c:\project> git config --get http.proxy
http://proxy.mycompany:80

Хтось отримував HTTP-вибори, щоб послідовно працювати через проксі? Що насправді дивно, це те, що кілька проектів на GitHub спрацьовують добре ( awesome_nested_setнаприклад), а інші постійно провалюються (наприклад, рейки ).


Чи може ваш проксі-центр цензурувати деякі слова чи щось, тим самим впливаючи лише на ті репости, коли ці слова відображаються як частина байтового потоку?
pjz


4
@alvaro, я думаю, ти маєш на увазі, що примусити git працювати з проксі-сервером можливий дублікат цього питання. Це питання старіше за питання, на яке ви звертаєтесь.
Дерек Махар

2
@James, ваша "глобальна" настройка Git для проксі-сервера насправді не глобальна, а локальна. Для того, щоб бути глобальним, то необхідно надати аргумент --globalдля git config.
Дерек Махар

1
@DerekMahar Старіші запитання можуть бути закриті з дублікатів нових запитань, якщо новіше питання кращої якості (або загалом застосовне).
Raedwald

Відповіді:


584

Ви також можете встановити HTTP-проксі, який Git використовує у глобальній властивості конфігурації http.proxy:

git config --global http.proxy http://proxy.mycompany:80

Для автентифікації з проксі:

git config --global http.proxy http://mydomain\\myusername:mypassword@myproxyserver:8080/

(Кредит належить @EugeneKulabuhov та @JaimeReynoso для формату аутентифікації.)


8
Це спрацювало для мене: встановіть HTTP_PROXY у середовищі для користувача (у Windows), а потім вище коментар із $ HTTP_PROXY (пропис). +1 для цього рішення.
Шон Ейткен

4
CleverCoder, у Windows потрібно вказати% HTTP_PROXY%, а не $ HTTP_PROXY (якщо, звичайно, ви не використовуєте Cygwin). Я відредагую свою відповідь на роботу в Windows, а не в середовищі Unix.
Дерек Махар

7
куди я покладу ім'я користувача та пароль для проксі?
Дуна

26
Використовуйте git config --global http.proxy http://mydomain\\myusername:mypassword@myproxyserver:8080синтаксис, щоб вказати ім’я користувача / пароль
Євген Кулабухов

2
Для всіх, у кого можуть виникнути проблеми з проксі, http: // <UserID>: <Password> @ <ProxyURL>: <Port> / працював на мене
Jaime Reynoso

146

На це вже є чудові відповіді. Однак я подумав, що я підключуся, оскільки деякі проксі-сервери вимагають від вас автентифікації з ідентифікатором користувача та паролем. Іноді це може бути в домені.

Наприклад, якщо ваша конфігурація проксі-сервера така:

Server: myproxyserver
Port: 8080
Username: mydomain\myusername
Password: mypassword

Потім додайте у свій .gitconfigфайл за допомогою наступної команди:

git config --global http.proxy http://mydomain\\myusername:mypassword@myproxyserver:8080

Не хвилюйся https. Поки зазначений проксі-сервер підтримує http та https, одного запису у конфігураційному файлі буде достатньо.

Потім ви можете перевірити, що команда .gitconfigуспішно додала запис до вашого файлу, виконавши cat .gitconfig:

В кінці файлу ви побачите запис таким чином:

[http]
    proxy = http://mydomain\\myusername:mypassword@myproxyserver:8080

Це воно!


Цікаво. Я можу на 100% дістатися до частини "Розв’язування дельти", але тоді схоже, що процес клонування просто зависає. Хтось це переживав?
Роман

1
+1. І незабаром ви зможете налаштувати проксі на url!
VonC

@apoplexy Чи можете ви прокоментувати запропоновані зміни, будь ласка, щоб я міг розглянути
Макс Маклеод

3
Якщо ви маєте символ @ у своєму імені користувача або паролі, тоді ви можете його кодувати URL, %40і він буде працювати.
Адарша

3
Замість cat .gitconfig ви можете перелічити параметри конфігурації з git config --list
user3969377

125

Нарешті, працювало встановлення http_proxyзмінної середовища. Я HTTP_PROXYправильно встановив , але git, мабуть, більше подобається нижній регістр.


3
Чи працює налаштування http.proxyв глобальній конфігурації Git? У своєму запитанні ви встановлюєте http.proxyв конфігурації локального сховища.
Дерек Махар

22
У моєму випадку мені довелося встановитиhttps_proxy
M Smith

1
https.proxyздавалося, працює для мене, коли я використовував https над github
Шервін Асгарі

3
@MSmith Якщо вам довелося це встановити, https_proxyви використовуєте httpsне те httpпитання, про яке йдеться.
Пьотр Доброгост

3
Curl і libcurl не розпізнають великі регістри HTTP_PROXY та HTTPS_PROXY. Перейдіть за цим посиланням для отримання додаткової інформації: curl.haxx.se/mail/archive-2001-12/0034.html
Doug

49

Схоже, ви використовуєте mingw-компіляцію Git у Windows (або, можливо, ще одну, про яку я не чув). Існує спосіб налагодити це: я вважаю, що вся робота http-проксі для git виконується curl. Установіть цю змінну середовища перед запуском git:

GIT_CURL_VERBOSE=1

Це має принаймні дати вам уявлення про те, що відбувається за лаштунками.


7
Коли я додаю цю змінну середовища, msysgit не надрукує нічого зайвого. :(
Ендрю Арнотт

після боротьби з проксі-серверами деякий час, ця порада допомогла мені з'ясувати, що база даних cert curl відсутня / переплутана, і ТО чому причини запитів були відмовлені.
davenpcj

Я це шукаю вже деякий час. Дякую.
M Smith

40

Якщо ви просто хочете використовувати проксі-сервер у визначеному сховищі, в інших сховищах не потрібно. Кращим способом є -c, --config <key=value>варіант, коли ви git cloneстворюєте сховище. напр

$ git clone https://chromium.googlesource.com/chromium/tools/depot_tools.git --config "http.proxy=proxyHost:proxyPort"

Це дивно, я спробував встановити $ http_proxy, але git це не поважав. Схоже, це піклується лише про власну конфігурацію ...
weberc2

Працює. Ви також можете вказати --configкілька разів, наприклад, коли ви також хочете встановити https.proxy.
barfuin

Дякую! Саме те, що я шукав
Боянг

2
клонувати з конфігурацією проксі, але без зміни конфігурації проксі користувача. Саме те, що мені потрібно! Дякую.
дум

26

Коли ваша мережна команда проводить ssl-перевірку шляхом перезапису сертифікатів, то використання http-адреса замість https-програми в поєднанні з налаштуванням цього варіанту працювало для мене.

git config --global http.proxy http://proxy:8081

2
Ви також можете додати це до середовища, щоб прийняти переписані сертифікати, які пропонують користувачі мережі для перевірки вашого трафіку: export GIT_SSL_NO_VERIFY = true
bbaassssiiee

Працювали для мене чудово. Дякую. Мені просто довелося додати git config --global http.proxy proxy: 8081 git config --global https.proxy proxy: 8081
Sid

просте і швидке рішення, +1 для цієї відповіді.
ВОЛКЕР

1
Дякую @sethbc, @datasmid! Мені потрібно GIT_CURL_VERBOSE = 1 для налагодження, а GIT_SSL_NO_VERIFY = true, щоб пропустити перевірку.
Генрі Рівера

не працює зі мною. навіть не з GIT_SSL_NO_VERIFY var
keinabel

20

Ви також можете редагувати .gitconfig файл, розташований у каталозі% userprofile% у системі Windows ( блокнот% userprofile% .gitconfig ) або у каталозі ~ у системі Linux ( vi ~ / .gitconfig ) та додати розділ http, як показано нижче.

Вміст файлу .gitconfig:

[http]
        proxy = http://proxy.mycompany:80

20

Для мене git: // просто не працює через проксі, хоча https: // так і працює. Це спричинило певний головний біль, тому що я виконував сценарії, в яких усі використовували git: //, тому я не міг їх легко змінити. Однак я знайшов цю ГЕМ

git config --global url."https://github.com/".insteadOf git://github.com/

Дякую, це дуже допомогло
dgrat

Я знаю, що у мене також були проблеми, щоб витягнути з git: //. Чи вважали ви ключовою проблемою SSH? Моя проблема була через погану конфігурацію ключа SSH.
авазула

17

Це давнє запитання, але якщо ви працюєте в Windows, подумайте про налаштування HTTPS_PROXY, якщо ви також отримуєте URL-адресу https. Працювали для мене!


2
В https_proxyмоєму випадку було достатньо встановити змінну оточення (не встановлено git global або repo proxy option) у моєму випадку (msysgit на Windows XP).
Пьотр Доброгост

13

Я не знаходжу http.proxyні GIT_PROXY_COMMANDроботи для свого автентифікованого http-проксі. Проксі-сервер жодним чином не спрацьовує. Але я знаходжу спосіб обійти це.

  1. Встановіть штопор або інші потрібні альтернативи.
  2. Створіть авторський файл. Формат для authfile:, user_name:passwordі user_name, passwordце ваше ім'я користувача та пароль для доступу до вашого проксі. Щоб створити такий файл, просто запустіть команду: echo "username:password" > ~/.ssh/authfile.

  3. Відредагуйте ~/.ssh/configта переконайтесь, що його дозвіл 644:chmod 644 ~/.ssh/config

Візьміть як приклад github.com, додайте наступні рядки до ~/.ssh/config:

Host    github.com
        HostName        github.com
        ProxyCommand    /usr/local/bin/corkscrew <your.proxy> <proxy port> %h %p <path/to/authfile>
        User            git

Тепер, коли ви нічого не робите git@github.com, він використовуватиме проксі автоматично. Ви можете легко зробити те саме, що і в Bitbucket .

Це не так елегантно, як інші підходи, але це працює як шарм.


1
Чи можете ви детальніше розібратися на кроці 2, "створити файл авторства"? Здається, ваш підхід єдиний, який буде працювати для git: // urls.
nik

@NikBagdon Я додав більше деталей до кроку 2. Повідомте мене, чи є щось незрозуміле :)
Карлосін

11

Якщо ви не хочете вводити свій пароль у .gitconfig у простому тексті, ви можете користуватися

Він автентифікує вас проти звичайного або навіть Windows NTLM проксі і запускає localhost-proxy без аутентифікації.

Для того, щоб запустити його:

  • Встановіть Cntml
  • Налаштуйте Cntml відповідно до документації, щоб пройти вашу автентифікацію проксі
  • Вкажіть git на новий проксі-сервер localhost:

    [http]
        proxy = http://localhost:3128       # change port as necessary
    

2
Для чого це варто, це повинна була бути прийнята відповідь, він на вікнах. Немає прозорого проксі-сервера (інакше не виникло б проблеми.
booyaa

9

Для мене це працювало:

sudo apt-get install socat

Створіть файл у вашому $ BIN_PATH / gitproxy за допомогою:

#!/bin/sh 
_proxy=192.168.192.1 
_proxyport=3128 
exec socat STDIO PROXY:$_proxy:$1:$2,proxyport=$_proxyport

Не забудьте дати йому дозволи на виконання

chmod a+x gitproxy

Виконайте наступні команди для налаштування середовища:

export PATH=$BIN_PATH:$PATH
git config --global core.gitproxy gitproxy

1
Посилання на пояснення та посилання на суть із оновленнями до (міні-) сценарію: emilsit.net/blog/archives/…
Карл Ріхтер

Ця відповідь є єдиною, яка працює для git://URL-адрес протоколів для тих (рідкісних) серверів git, які не підтримують https. Також працює на windows, з відповідним пакетним файлом і socat для windows.
davenpcj

8

Налаштування проксі для git

командування

git config --global http.proxy http://user:password@domain:port

приклад

git config --global http.proxy http://clairton:123456@proxy.clairtonluz.com.br:8080

7

Встановіть Git poverljivo.helper на wincred.

git config --global credential.helper wincred

Переконайтеся, що є лише 1 довідник.помічник

git config -l

Якщо є більше ніж 1 і він не встановлений wincred, видаліть його.

git config --system --unset credential.helper

Тепер встановіть проксі без пароля.

git config --global http.proxy http://<YOUR WIN LOGIN NAME>@proxy:80

Перевірте, чи всі налаштування, які ви додали, виглядають добре ...

git config --global -l

Тепер вам добре піти!


6

У мене була така ж проблема, з дещо іншим виправленням: ВІДНОСНЕННЯ GIT З підтримкою HTTP

git:Протокол не працює через свій корпоративний брандмауер.

Наприклад, цей час вичерпано:

git clone git://github.com/miksago/node-websocket-server.git

curl github.comХоча це працює чудово, тому я знаю, що http_proxyмінлива середовище правильна.

Я намагався використовувати http, як нижче, але отримав негайну помилку.

git clone http://github.com/miksago/node-websocket-server.git

->>>  fatal: Unable to find remote helper for 'http' <<<-

Я спробував перекомпілювати git так:

./configure  --with-curl --with-expat

але все ж отримав фатальну помилку.

Нарешті, через кілька розчаруючих годин, я прочитав файл налаштування і побачив це:

# Визначте CURLDIR = / foo / bar, якщо заголовок curl та файли бібліотеки знаходяться в

# / foo / bar / включають каталоги та / foo / bar / lib.

Тоді я згадав, що не виконував curlджерела, і тому пішов шукати файли заголовків. Звичайно, їх не встановили. У цьому і була проблема. Make не скаржився на відсутні файли заголовків. Тож я не усвідомлював, що --with-curlпараметр нічого не зробив (це фактично дефолт у моїй версії git).

Я зробив наступне, щоб виправити це:

  1. Додано заголовки, необхідні для виготовлення:

    yum install curl-devel
    (expat-devel-1.95.8-8.3.el5_5.3.i386  was already installed).
    
  2. Видалено gitз /usr/local(як я хочу, щоб нова установка жила там).

    Мене просто зняли git*з /usr/local/shareі/usr/local/libexec

  3. Шукав включати dirs, що містять файли curlта expatзаголовок, а потім (тому що я читав configure) додав їх у середовище так:

    export CURLDIR=/usr/include 
    export EXPATDIR=/usr/include
    
  4. Ран configureз наступними параметрами, які, знову ж таки, були описані у самому configureфайлі, а також були за замовчуванням, але що, до біса:

    ./configure  --with-curl --with-expat
    
  5. А тепер httpпрацює з gitмоїм корпоративним брандмауером:

    git clone http://github.com/miksago/node-websocket-server.git
    Cloning into 'node-websocket-server'...
    * Couldn't find host github.com in the .netrc file, using defaults
    * About to connect() to proxy proxy.entp.attws.com port 8080
    *   Trying 135.214.40.30... * connected
    ...
    

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

5

Щойно опублікувавши це, оскільки це перший результат в Google, ця публікація в блозі, яку я знайшов, вирішує для мене проблему, оновивши сертифікати на вигин.

http://www.simplicidade.org/notes/archives/2011/06/github_ssl_ca_errors.html


1
Аллелуя, цей плюс, git config --global http.sslcainfo NEW_CERTS_BUNDLE.crtяк описано в: stackoverflow.com/a/8248484/98528 зробив це для мене! Дякую!
akavel


3

Ви можете використовувати:

git config --add http.proxy http://user:password@proxy_host:proxy_port


2

Для Windows

Перейдіть -> C: / Users / user_name / gitconfig

Оновіть файл gitconfig із деталями нижче

[http]

[https]

proxy = https://your_proxy:your_port

[http]

proxy = http://your_proxy:your_port

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

Internet Explorer -> Установки -> Параметри Інтернету -> З'єднання -> Налаштування локальної мережі


2

Наведений нижче метод працює для мене:

echo 'export http_proxy=http://username:password@roxy_host:port/' >> ~/.bash_profile
echo 'export https_proxy=http://username:password@roxy_host:port' >> ~/.bash_profile
  • Zsh примітка: Змініть файл ~ / .zshenv замість ~ / .bash_profile.
  • Примітка Ubuntu та Fedora: Змініть файл ~ / .bashrc замість ~ / .bash_profile.

2

Варто зазначити: Більшість прикладів у мережі показують такі приклади

git config --global http.proxy proxy_user:proxy_passwd@proxy_ip:proxy_port

Отже, здається, що - якщо ваш проксі-сервер потребує автентифікації - ви повинні залишити свій пароль компанії у git-config. Що насправді не круто.

Але, якщо ви просто налаштуєте користувача без пароля:

git config --global http.proxy proxy_user@proxy_ip:proxy_port

Здається, Git (принаймні, на моїй машині Windows без помічників-помічників) визнає це і запитує проксі-пароль при повторному доступі.


Ви мій чоловік, оскільки ім'я користувача та пароль моєї компанії sso мають стільки спеціальних символів, що їх було неможливо кодувати та пройти. За допомогою цього «ескамотажу» я зміг надати пароль на обличчі клона або будь-яких інших наступних кроків після встановлення проксі-адреси.
Carmine Tambascia

1

Це не проблема з вашим проксі-сервером. Це проблема з github (або git). Мене також не вдається на git-1.6.0.1 на Linux. Помилка вже повідомляється (від вас не менше).

Не забудьте видалити паски, вони вже перебувають у google. Редагувати: Мабуть, я мріяв, я думаю, ви не можете їх видалити. Використовувати замість Gist ?


Я публікував до github та msysGit, а також b / c, я не був впевнений, де лежить проблема. На жаль, я не можу видалити паски.
Джеймс А. Росен


1

Наведені вище відповіді працювали для мене, коли мій проксі не потребує автентифікації. Якщо ви використовуєте проксі, який вимагає вам автентифікації, ви можете спробувати CCProxy. У мене є невеликий підручник про те, як його налаштувати тут,

http://blog.praveenkumar.co.in/2012/09/proxy-free-windows-xp78-and-mobiles.html

Я зміг штовхати, тягнути, створювати нові репости. Все працювало просто чудово. Переконайтеся, що ви робите чисту видалення та перевстановлення нової версії, якщо у вас виникли проблеми з Git, як я.



0

Я обійшов проксі за допомогою https ... деякі проксі навіть не перевіряють https.

Microsoft Windows [Version 6.1.7601]
Copyright (c) 2009 Microsoft Corporation.  All rights reserved.

c:\git\meantest>git clone http://github.com/linnovate/mean.git
Cloning into 'mean'...
fatal: unable to access 'http://github.com/linnovate/mean.git/': Failed connect
to github.com:80; No error

c:\git\meantest>git clone https://github.com/linnovate/mean.git
Cloning into 'mean'...
remote: Reusing existing pack: 2587, done.
remote: Counting objects: 27, done.
remote: Compressing objects: 100% (24/24), done.
rRemote: Total 2614 (delta 3), reused 4 (delta 0)eceiving objects:  98% (2562/26

Receiving objects: 100% (2614/2614), 1.76 MiB | 305.00 KiB/s, done.
Resolving deltas: 100% (1166/1166), done.
Checking connectivity... done

0

Оскільки на це відповіли багато, але це лише для Winodws USER, який стоїть за проксі-сервером з auth.

Перевстановлення (спочатку не вдалося, не видаляти).

Goto ->
**Windows**
1. msysgit\installer-tmp\etc\gitconfig
    Under [http]
        proxy = http://user:pass@url:port

**Linux**
1. msysgit\installer-tmp\setup-msysgit.sh
      export HTTP_PROXY="http://USER:PASS@proxy.abc.com:8080"

якщо у вас є якісь особливі знаки в користуванні / передачі знаки паролі, url_encode

Використовуючи наш веб-сайт, ви визнаєте, що прочитали та зрозуміли наші Політику щодо файлів cookie та Політику конфіденційності.
Licensed under cc by-sa 3.0 with attribution required.