Como puxo de um repositório Git através de um proxy HTTP?


491

Nota: enquanto o caso de uso descrito é sobre o uso de submódulos dentro de um projeto, o mesmo se aplica a um normal git clone de um repositório por HTTP.

Eu tenho um projeto sob controle do Git. Eu gostaria de adicionar um submódulo:

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

Mas eu entendo

...
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'

Eu tenho meu HTTP_PROXY configurado:

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

Eu tenho até uma configuração global do Git para o proxy http:

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

Alguém conseguiu buscas HTTP para trabalhar consistentemente através de um proxy? O que é realmente estranho é que alguns projetos no GitHub funcionam bem ( awesome_nested_setpor exemplo), mas outros falham consistentemente ( trilhos, por exemplo).


Seu proxy poderia censurar algumas palavras ou algo assim, afetando apenas aqueles repositórios em que essas palavras aparecem como parte do fluxo de bytes?
pjz


4
@ alvaro, acho que você quer dizer que fazer o git funcionar com um servidor proxy é uma possível duplicação desta questão. Esta pergunta é mais antiga que a que você se refere.
Derek Mahar

2
@ James, sua configuração "global" do Git para o servidor proxy não é realmente global, mas local. Para ser global, você precisa fornecer argumentos --globalpara git config.
Derek Mahar

1
@DerekMahar Perguntas mais antigas podem ser encerradas com duplicatas de perguntas mais recentes, se a pergunta mais recente for de melhor qualidade (ou mais aplicável em geral).
Raedwald 16/02

Respostas:


584

Você também pode definir o proxy HTTP que o Git usa na propriedade de configuração global http.proxy:

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

Para autenticar com o proxy:

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

(O crédito vai para @EugeneKulabuhov e @JaimeReynoso pelo formato de autenticação.)


8
Isso funcionou para mim: defina HTTP_PROXY no ambiente do usuário (no Windows) e, em seguida, o comentário acima com $ HTTP_PROXY (maiúsculo). +1 para esta solução.
Sean Aitken

4
CleverCoder, no Windows, você precisa especificar% HTTP_PROXY%, não $ HTTP_PROXY (a menos que esteja executando o Cygwin, é claro). Editarei minha resposta para funcionar no Windows em vez de em um ambiente Unix.
Derek Mahar

7
onde coloco o nome de usuário e a senha do proxy?
Duna

26
Use git config --global http.proxy http://mydomain\\myusername:mypassword@myproxyserver:8080a sintaxe a fornecer nome de usuário / senha
Eugene Kulabuhov

2
Para quem pode estar tendo problemas com o proxy, http: // <UserID>: <senha> @ <ProxyURL>: <porta> / trabalhou para mim
Jaime Reynoso

146

Já existem ótimas respostas sobre isso. No entanto, pensei em fazer o chip, pois alguns servidores proxy exigem que você se autentique com um ID de usuário e senha. Às vezes, isso pode estar em um domínio.

Portanto, por exemplo, se a configuração do servidor proxy for a seguinte:

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

Em seguida, adicione ao seu .gitconfigarquivo usando o seguinte comando:

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

Não se preocupe https. Enquanto o servidor proxy especificado suportar http e https, uma entrada no arquivo de configuração será suficiente.

Você pode verificar se o comando adicionou a entrada ao seu .gitconfigarquivo com êxito, executando cat .gitconfig:

No final do arquivo, você verá uma entrada da seguinte maneira:

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

É isso aí!


Interessante. Eu consigo acessar a parte "Resolver deltas" com 100%, mas parece que o processo de clone simplesmente trava. Alguém experimentou isso?
Roman

1
+1. E em breve, você poderá configurar o proxy por URL!
VonC 10/09/13

@apoplexy você pode comentar sobre a sua edição sugeriu agradar para que eu possa considerar
Max MacLeod

3
Se você tiver um símbolo @ no seu nome de usuário ou senha, poderá codificá-lo por URL %40e ele funcionará.
Adarsha

3
Em vez de cat .gitconfig, você pode listar as configurações com git config --list
user3969377

125

O que finalmente funcionou foi definir a http_proxyvariável de ambiente. Eu havia definido HTTP_PROXYcorretamente, mas aparentemente o git gosta mais da versão em minúscula.


3
A configuração http.proxyna configuração global do Git funciona? Na sua pergunta, você define http.proxyna configuração do repositório local.
Derek Mahar

22
No meu caso, eu tive que definir ohttps_proxy
M Smith

1
https.proxyparecia trabalho para mim como eu estava usando https sobre github
Shervin Asgari

3
@MSmith Se você tivesse que definir https_proxyisso, significa que httpsnão estava usando httpqual pergunta é sobre.
Piotr Dobrogost

3
Curl e libcurl não reconhecem HTTP_PROXY e HTTPS_PROXY em maiúsculas. Veja este link para obter mais informações: curl.haxx.se/mail/archive-2001-12/0034.html
Doug

49

Parece que você está usando uma compilação do Git no Windows (ou possivelmente outra que eu não tenha ouvido falar). Existem maneiras de depurar isso: acredito que todo o trabalho de proxy http para o git seja feito por curl. Defina esta variável de ambiente antes de executar o git:

GIT_CURL_VERBOSE=1

Isso deve, pelo menos, dar uma idéia do que está acontecendo nos bastidores.


7
Quando adiciono essa variável de ambiente, o msysgit não imprime nada extra. :(
Andrew Arnott

depois de lutar com proxies por algum tempo, essa dica me ajudou a descobrir que o banco de dados de certificados do curl estava ausente / bagunçado, e foi por isso que os pedidos estavam falhando.
Davidpcj

Estou procurando por isso há algum tempo. Obrigado.
M Smith

40

Se você deseja apenas usar proxy em um repositório especificado, não precisa de outros repositórios. A maneira preferível é a -c, --config <key=value>opção quando você é git cloneum repositório. por exemplo

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

Isso é estranho, tentei definir $ http_proxy, mas o git não o respeitou. Parece que só se preocupa com a sua própria configuração ...
weberc2

Trabalho. Você também pode especificar --configvárias vezes, por exemplo, quando você também deseja definir https.proxy.
Barfuin #

Obrigado! Exatamente o que eu estava procurando
Boyang

2
clone com a configuração de proxy, mas sem alterar a configuração de proxy do usuário. Exatamente o que eu preciso! Valeu.
21318 doom

26

Quando sua equipe de rede faz a inspeção SSL reescrevendo certificados, o uso de um URL http em vez de um https, combinado com a configuração dessa var, funcionou para mim.

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

2
Você também pode adicionar este para o meio ambiente para aceitar os certificados reescritos que os caras de rede oferecem para inspecionar o tráfego: export GIT_SSL_NO_VERIFY = true
bbaassssiiee

Funcionou para mim perfeitamente. Obrigado. Eu apenas tive que adicionar git configuração --global http.proxy proxy: 8081 git configuração --global https.proxy proxy: 8081
Sid

solução simples e rápida, +1 para esta resposta.
WALKER 30/03

1
Graças a @sethbc, @datasmid! Eu precisava de GIT_CURL_VERBOSE = 1 para depurar e GIT_SSL_NO_VERIFY = true para ignorar a verificação.
Henry Rivera

não está trabalhando comigo. nem mesmo com o GIT_SSL_NO_VERIFY var
keinabel 16/05

20

Você também pode editar o arquivo .gitconfig localizado no diretório% userprofile% no sistema Windows ( bloco de notas% userprofile% .gitconfig ) ou no diretório ~ no sistema Linux ( vi ~ / .gitconfig ) e adicionar uma seção http como abaixo.

Conteúdo do arquivo .gitconfig:

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

20

Para mim, o git: // simplesmente não funciona através do proxy, embora o https: // funcione. Isso causou um pouco de dor de cabeça, porque eu estava executando scripts que todos usavam git: //, então não pude facilmente mudar todos eles. No entanto, eu encontrei este GEM

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

Obrigado, isso ajudou muito
dgrat

Eu sei que também tive problemas para extrair do git: //. Você já considerou um problema chave do SSH? Meu problema foi devido a uma configuração incorreta da chave SSH.
Avazula 17/05/19

17

Essa é uma pergunta antiga, mas se você estiver no Windows, considere a configuração de HTTPS_PROXY também se estiver recuperando por meio de um URL https. Trabalhou para mim!


2
Foi o suficiente para definir https_proxya variável de ambiente sozinha (nenhuma opção git global ou repo proxy definida) no meu caso (msysgit no Windows XP).
Piotr Dobrogost

13

Não encontro http.proxynem GIT_PROXY_COMMANDtrabalho para o meu proxy http autenticado. O proxy não é acionado de nenhuma maneira. Mas acho uma maneira de contornar isso.

  1. Instale o saca-rolhas ou outras alternativas que desejar.
  2. Crie um arquivo de autenticação. O formato para authfileé:, user_name:passworde user_name, passwordé seu nome de usuário e senha para acessar seu proxy. Para criar tal arquivo um, simplesmente execute o comando como este: echo "username:password" > ~/.ssh/authfile.

  3. Edite ~/.ssh/confige verifique se a permissão é 644:chmod 644 ~/.ssh/config

Tome o github.com como exemplo, adicione as seguintes linhas em ~/.ssh/config:

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

Agora, sempre que você fizer alguma coisa git@github.com, ele usará o proxy automaticamente. Você pode facilmente fazer o mesmo com o Bitbucket também.

Isso não é tão elegante quanto outras abordagens, mas funciona como um encanto.


1
Você pode elaborar a etapa 2, "criar um arquivo de autenticação"? Parece que sua abordagem é a única que funcionará para git: // urls.
N /

@NikBagdon eu adicionei mais detalhes para a etapa 2. Deixe-me saber se há algo :) claro
Carlosin

11

No Windows, se você não quiser colocar sua senha em .gitconfig em texto sem formatação, poderá usar

Ele o autentica no proxy normal ou mesmo no Windows NTLM e inicia o proxy localhost sem autenticação.

Para executá-lo:

  • Instalar Cntml
  • Configure o Cntml de acordo com a documentação para passar sua autenticação de proxy
  • Aponte git para seu novo proxy localhost:

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

2
Pelo que vale, essa deveria ter sido a resposta aceita, ele está no Windows. Não há um proxy transparente (caso contrário, não seria um problema.
Booyaa

9

Para mim, o que funcionou foi:

sudo apt-get install socat

Crie um arquivo dentro do seu $ BIN_PATH / gitproxy com:

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

Não se esqueça de dar permissões de execução

chmod a+x gitproxy

Execute os seguintes comandos para configurar o ambiente:

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

1
Link para uma explicação e um link para uma essência com as atualizações para o script (mini): emilsit.net/blog/archives/...
Karl Richter

Essa resposta é a única que funciona para git://URLs de protocolo, para aqueles (raros) servidores git que não suportam https. Também funciona no Windows, com um arquivo em lotes apropriado e um socat para o Windows.
Davidpcj

8

Configurar proxy para git

comando

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

exemplo

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

7

Defina Git credential.helper como wincred.

git config --global credential.helper wincred

Verifique se há apenas 1 credencial.helper

git config -l

Se houver mais de 1 e não estiver definido como wincred, remova-o.

git config --system --unset credential.helper

Agora defina o proxy sem senha.

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

Verifique se todas as configurações que você adicionou parecem boas ....

git config --global -l

Agora você está pronto para ir!


6

Eu tive o mesmo problema, com uma correção ligeiramente diferente: RECONSTRUINDO GIT COM SUPORTE HTTP

O git:protocolo não funcionou através do meu firewall corporativo.

Por exemplo, este tempo excedeu o tempo limite:

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

curl github.comfunciona muito bem, então eu sei que minha http_proxyvariável de ambiente está correta.

Tentei usar http, como abaixo, mas recebi um erro imediato.

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

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

Tentei recompilar o git da seguinte forma:

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

mas ainda tenho o erro fatal.

Finalmente, depois de várias horas frustrantes, li o arquivo de configuração e vi o seguinte:

# Defina CURLDIR = / foo / bar se o cabeçalho de ondulação e os arquivos da biblioteca estiverem em

Diretórios # / foo / bar / include e / foo / bar / lib.

Lembrei-me então de que não havia cumprido o curlcódigo-fonte e fui procurar os arquivos de cabeçalho. Com certeza, eles não foram instalados. Esse foi o problema. Make não reclamou dos arquivos de cabeçalho ausentes. Portanto, não percebi que a --with-curlopção não fez nada (na verdade, é o padrão na minha versão do git).

Fiz o seguinte para corrigi-lo:

  1. Adicionados os cabeçalhos necessários para o make:

    yum install curl-devel
    (expat-devel-1.95.8-8.3.el5_5.3.i386  was already installed).
    
  2. Removido gitde /usr/local(como eu quero que a nova instalação viva lá).

    I simplesmente removida git*de /usr/local/sharee/usr/local/libexec

  3. Procurei os diretórios de inclusão que contêm os arquivos curle do expatcabeçalho e , em seguida (porque eu havia lido configure), os adicionei ao ambiente da seguinte maneira:

    export CURLDIR=/usr/include 
    export EXPATDIR=/usr/include
    
  4. Funcionou configurecom as seguintes opções, que, novamente, foram descritas no configurepróprio arquivo e também eram os padrões, mas que diabos:

    ./configure  --with-curl --with-expat
    
  5. E agora httpfunciona gitatravés do meu firewall corporativo:

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

Eu ficaria feliz que você apresentou este, não percebi que o protocolo git não estava sendo tratado no meu proxy squid
rupert160


5

Isso funcionou para mim.

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

3

você pode usar:

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


2

Para Windows

Ir para -> C: / Users / user_name / gitconfig

Atualize o arquivo gitconfig com os detalhes abaixo

[http]

[https]

proxy = https://your_proxy:your_port

[http]

proxy = http://your_proxy:your_port

Como verificar seu número de proxy e porta?

Internet Explorer -> Configurações -> Opções da Internet -> Conexões -> Configurações da LAN


2

O método abaixo funciona para mim:

echo 'export http_proxy=http://username:password@roxy_host:port/' >> ~/.bash_profile
echo 'export https_proxy=http://username:password@roxy_host:port' >> ~/.bash_profile
  • Nota do Zsh: modifique o arquivo ~ / .zshenv em vez de ~ / .bash_profile.
  • Nota do Ubuntu e Fedora: Modifique o arquivo ~ / .bashrc em vez de ~ / .bash_profile.

2

Vale ressaltar: a maioria dos exemplos na rede mostra exemplos como

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

Parece que, se o seu proxy precisar de autenticação, você deve deixar a senha da empresa no git-config. O que não é muito legal.

Mas, se você acabou de configurar o usuário sem senha:

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

O Git parece (pelo menos na minha máquina Windows sem o auxiliar de credenciais) reconhecer isso e solicitar a senha do proxy no repo-access.


Você é meu homem, já que o nome de usuário e a senha da minha empresa têm tantos símbolos especiais que eram impossíveis de codificar e passar. Com essa "escamotagem", fui capaz de fornecer a senha na face do clone ou quaisquer outras próximas etapas após definir o endereço de proxy.
Carmine Tambascia 10/03

1

Este não é um problema com seu proxy. É um problema com o github (ou git). Ele falha para mim no git-1.6.0.1 no linux também. O bug já foi relatado (por você não menos).

Certifique-se de excluir seus pastéis, eles já estão no google. Edit: Deve ter sonhado, acho que você não pode excluí-los. Usar Gist ?


Postei no github e no msysGit também porque eu não tinha certeza de onde estava o problema. Infelizmente, não consigo excluir os pastéis.
James A. Rosen


1

As respostas acima funcionaram para mim quando meu proxy não precisa de autenticação. Se você estiver usando um proxy que requer autenticação, tente o CCProxy. Eu tenho um pequeno tutorial sobre como configurá-lo aqui,

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

Consegui empurrar, puxar, criar novos repositórios. Tudo funcionou muito bem. Certifique-se de fazer uma desinstalação limpa e reinstalar a nova versão, se você estiver enfrentando problemas com o Git, como eu fiz.


1

como @ user2188765 já apontou, tente substituir o git://protocolo do repositório por http[s]://. Veja também esta resposta


0

Eu contornei o proxy usando https ... alguns proxies nem sequer verificam 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

Como isso foi respondido por muitos, mas isso é apenas para o USUÁRIO do Winodws, que está por trás do proxy com autenticação.

Reinstalação (primeira falha, não remova).

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"

se você tiver algum caractere especial em user / pass, use url_encode

Ao utilizar nosso site, você reconhece que leu e compreendeu nossa Política de Cookies e nossa Política de Privacidade.
Licensed under cc by-sa 3.0 with attribution required.