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

James A. Rosen
fonte
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
8
possível duplicata de Obtendo git para trabalhar com um servidor proxy
alvaro
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.)

Derek Mahar
fonte
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í!

Max MacLeod
fonte
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.

James A. Rosen
fonte
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.

sethbc
fonte
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"
alijandro
fonte
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
bbaassssiiee
fonte
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
STB Land
fonte
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/
TonyT_32909023190
fonte
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!

Benjamin Wootton
fonte
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 [email protected], 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.

Carlosin
fonte
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
    
Boris Brodski
fonte
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
Lesswire
fonte
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:[email protected]:8080
Clairton Luz
fonte
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!

Thor88
fonte
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
    ...
    
steve98177
fonte
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
Vagner Nogueira
fonte
3

você pode usar:

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

Usar proxychains

proxychains git pull ...

update: proxychains foi descontinuado, use proxychains-ng .

fangxing
fonte
infelizmente somente Unix
Samoth
2
@Samoth Jun para janelas seu pode querer tentar SocksCap64
Fangxing
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

Menino de escola
fonte
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.
Nguyen Van Duc
fonte
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.

gratinado
fonte
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 ?

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

Praveen
fonte
1

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

DomTomCat
fonte
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
Robert Koch
fonte
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:[email protected]:8080"

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

Ravi Parekh
fonte