Как вытащить из 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например), но другие постоянно терпят неудачу ( например, rails ).


Может ли ваш прокси-сервер подвергать цензуре некоторые слова или что-то подобное, затрагивая тем самым только те репозитории, в которых эти слова появляются как часть потока байтов?
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> / работал для меня
Хайме Рейносо

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

Это оно!


Интересно. Я могу добраться до «Resolving deltas» со 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
М Смит

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
Даг

49

Похоже, вы используете Mingw-компиляцию Git для Windows (или, возможно, другую, о которой я не слышал). Есть способы отладки этого: я считаю, что вся работа http-прокси для git выполняется curl. Установите эту переменную среды перед запуском git:

GIT_CURL_VERBOSE=1

Это должно по крайней мере дать вам представление о том, что происходит за кулисами.


7
Когда я добавляю эту переменную окружения, msysgit не выводит ничего лишнего. :(
Эндрю Арнотт

после некоторого времени борьбы с прокси, этот совет помог мне выяснить, что база данных curl отсутствует / испорчена, и именно поэтому запросы не выполняются.
davenpcj

Я искал это в течение некоторого времени. Спасибо.
М Смит

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-инспекцию, переписывая сертификаты, затем использует URL-адрес http вместо https-адреса в сочетании с настройкой этого var, это сработало для меня.

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 за этот ответ.
WALKER

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

не работает со мной. даже с GIT_SSL_NO_VERIFY вар
keinabel

20

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

Содержимое файла .gitconfig:

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

20

Для меня git: // просто не работает через прокси, хотя https: // работает. Это вызвало некоторую головную боль, потому что я запускал скрипты, которые все использовали git: //, поэтому я не мог просто легко изменить их все. Однако я нашел этот GEM

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 или опции прокси-сервера репозитория) (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.
Ник

@NikBagdon Я добавил больше деталей к шагу 2. Дайте мне знать, если что-то неясно :)
Carlosin

11

В Windows, если вы не хотите указывать свой пароль в .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 credential.helper значение wincred.

git config --global credential.helper wincred

Убедитесь, что есть только 1 credential.helper

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

У меня была та же проблема, с немного другим исправлением: REBUILDING GIT WITH HTTP SUPPORT

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 / include и / foo / bar / lib.

Я вспомнил тогда, что я не выполнил curlиз источника, и поэтому пошел искать файлы заголовков. Конечно же, они не были установлены. Это была проблема. Make не жаловался на отсутствующие заголовочные файлы. Поэтому я не понял, что этот --with-curlвариант ничего не сделал (на самом деле это вариант по умолчанию в моей версии git).

Я сделал следующее, чтобы исправить это:

  1. Добавлены заголовки, необходимые для make:

    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. Поиск по каталогам include, содержащим файлы заголовков 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, этот пост в блоге, который я нашел, решает проблему для меня, обновляя сертификаты curl.

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 / имя_пользователя / 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 note: измените файл ~ / .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 имеют так много специальных символов, которые было совершенно невозможно кодировать и пройти. С этим "escamotage" я смог предоставить пароль на лице клона или любых других последующих шагах после того, как установил адрес прокси.
Кармин Tambascia

1

Это не проблема с вашим прокси. Это проблема с github (или git). Для меня это не работает на git-1.6.0.1 на linux. Ошибка уже сообщена (вами не меньше).

Обязательно удалите свои пирожки, они уже в гугле. Изменить: Должно быть мечтал, я думаю, вы не можете удалить их. Вместо этого использовать Gist ?


Я также писал на github и msysGit, потому что не знал, в чем проблема. Кажется, я не могу удалить пирожки.
Джеймс А. Розен


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, который стоит за прокси с аутентификацией.

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

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"

если у вас есть специальный символ в user / pass, используйте url_encode

Используя наш сайт, вы подтверждаете, что прочитали и поняли нашу Политику в отношении файлов cookie и Политику конфиденциальности.
Licensed under cc by-sa 3.0 with attribution required.