¿Cómo extraigo de un repositorio Git a través de un proxy HTTP?

491

Nota: si bien el caso de uso descrito se refiere al uso de submódulos dentro de un proyecto, lo mismo se aplica a la normalidad git clonede un repositorio a través de HTTP.

Tengo un proyecto bajo el control de Git. Me gustaría agregar un submódulo:

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

Pero consigo

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

Tengo mi HTTP_PROXY configurado:

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

Incluso tengo una configuración global de Git para el proxy http:

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

¿Alguien ha obtenido recuperaciones HTTP para trabajar constantemente a través de un proxy? Lo que es realmente extraño es que algunos proyectos en GitHub funcionan bien ( awesome_nested_setpor ejemplo), pero otros fallan constantemente ( por ejemplo, los rieles ).

James A. Rosen
fuente
¿Podría su proxy estar censurando algunas palabras o algo, y por lo tanto solo afectar a los repositorios donde esas palabras aparecen como parte del flujo de bytes?
pjz
8
posible duplicado de conseguir que git funcione con un servidor proxy
alvaro
44
@alvaro, creo que quieres decir que hacer que git funcione con un servidor proxy es un posible duplicado de esta pregunta. Esta pregunta es anterior a la que se refiere.
Derek Mahar
2
@ James, su configuración de Git "global" para el servidor proxy no es realmente global, sino local. Para ser global, debe proporcionar argumentos --globala git config.
Derek Mahar
1
@DerekMahar Las preguntas anteriores pueden estar cerradas de duplicados de preguntas más nuevas, si la pregunta más nueva es de mejor calidad (o más aplicable en general).
Raedwald

Respuestas:

584

También puede configurar el proxy HTTP que Git usa en la propiedad de configuración global http.proxy:

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

Para autenticarse con el proxy:

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

(El crédito va a @EugeneKulabuhov y @JaimeReynoso por el formato de autenticación).

Derek Mahar
fuente
8
Esto funcionó para mí: establezca HTTP_PROXY en el entorno para el usuario (en Windows), luego el comentario anterior con $ HTTP_PROXY (mayúscula). +1 para esta solución.
Sean Aitken
44
CleverCoder, en Windows, debe especificar% HTTP_PROXY%, no $ HTTP_PROXY (a menos que esté ejecutando Cygwin, por supuesto). Editaré mi respuesta para trabajar en Windows en lugar de en un entorno Unix.
Derek Mahar
77
¿Dónde pongo el nombre de usuario y la contraseña del proxy?
Duna
26
Use la git config --global http.proxy http://mydomain\\myusername:mypassword@myproxyserver:8080sintaxis para proporcionar nombre de usuario / contraseña
Eugene Kulabuhov
2
Para cualquiera que pueda tener problemas con el proxy, http: // <UserID>: <Password> @ <ProxyURL>: <Port> / funcionó para mí
Jaime Reynoso
146

Ya hay algunas respuestas geniales sobre esto. Sin embargo, pensé que me incorporaría, ya que algunos servidores proxy requieren que se autentique con un ID de usuario y contraseña. A veces esto puede estar en un dominio.

Entonces, por ejemplo, si la configuración de su servidor proxy es la siguiente:

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

Luego, agregue a su .gitconfigarchivo con el siguiente comando:

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

No te preocupes por eso https. Mientras el servidor proxy especificado sea compatible con http y https, será suficiente una entrada en el archivo de configuración.

Luego puede verificar que el comando agregó la entrada a su .gitconfigarchivo con éxito haciendo cat .gitconfig:

Al final del archivo verá una entrada de la siguiente manera:

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

¡Eso es!

Max MacLeod
fuente
Interesante. Puedo llegar a la parte "Resolver deltas" con el 100%, pero parece que el proceso de clonación simplemente se bloquea. Alguien ha experimentado eso?
Romano
1
+1. ¡Y pronto podrá configurar el proxy por url!
VonC
@apoplexy, ¿puedes comentar tu edición sugerida por favor para que pueda considerarla
Max MacLeod
3
Si tiene el símbolo @ en su nombre de usuario o contraseña, puede codificarlo con URL %40y funcionará.
Adarsha
3
En lugar de cat .gitconfig, puede enumerar las configuraciones con git config --list
user3969377
125

Lo que finalmente funcionó fue establecer la http_proxyvariable de entorno. Lo había configurado HTTP_PROXYcorrectamente, pero a git aparentemente le gusta más la versión en minúsculas.

James A. Rosen
fuente
3
¿Funciona la configuración http.proxyen la configuración global de Git? En su pregunta, establece http.proxyen la configuración del repositorio local.
Derek Mahar
22
En mi caso tuve que configurar elhttps_proxy
M Smith
1
https.proxyparecía funcionar para mí ya que estaba usando https sobre github
Shervin Asgari
3
@MSmith Si tuvieras que configurar https_proxyesto, significa que estabas usando httpsno de httpqué pregunta se trata.
Piotr Dobrogost
3
Curl y libcurl no reconocen HTTP_PROXY y HTTPS_PROXY en mayúsculas. Consulte este enlace para obtener más información: curl.haxx.se/mail/archive-2001-12/0034.html
Doug
49

Parece que estás usando una compilación mingw de Git en Windows (o posiblemente otra de la que no he oído hablar). Hay formas de depurar esto: creo que todo el trabajo de proxy http para git se realiza mediante curl. Establezca esta variable de entorno antes de ejecutar git:

GIT_CURL_VERBOSE=1

Esto debería al menos darte una idea de lo que está sucediendo detrás de escena.

sethbc
fuente
77
Cuando agrego esta variable de entorno, msysgit no imprime nada extra. :(
Andrew Arnott
Después de luchar con proxies durante algún tiempo, este consejo me ayudó a descubrir que faltaba la base de datos de certificados de curl / que estaba en mal estado, y ESA fue la razón por la que las solicitudes fallaban.
davenpcj
He estado buscando esto por algún tiempo ahora. Gracias.
M Smith
40

Si solo quiere usar proxy en un repositorio específico, no lo necesite en otros repositorios. La forma preferible es la -c, --config <key=value>opción cuando es git cloneun repositorio. p.ej

$ git clone https://chromium.googlesource.com/chromium/tools/depot_tools.git --config "http.proxy=proxyHost:proxyPort"
alijandro
fuente
Esto es extraño, intenté configurar $ http_proxy, pero git no lo respetó. Parece que solo le importa su propia configuración ...
weberc2
Trabajos. También puede especificar --configvarias veces, por ejemplo, cuándo también desea configurar https.proxy.
barfuin
¡Gracias! Exactamente lo que estaba buscando
Boyang
2
clonar con configuración proxy pero sin cambiar la configuración proxy del usuario. ¡Exactamente lo que necesito! Gracias.
Doom
26

Cuando su equipo de red realiza una inspección SSL reescribiendo certificados, luego usando una URL http en lugar de una https, combinada con la configuración de esta var funcionó para mí.

git config --global http.proxy http://proxy:8081
bbaassssiiee
fuente
2
También puede agregar esto al entorno para aceptar los certificados reescritos que los tipos de red ofrecen para inspeccionar su tráfico: export GIT_SSL_NO_VERIFY = true
bbaassssiiee
Me funcionó perfectamente. Gracias. Solo tenía que agregar git config - proxy global http.proxy : 8081 git config - proxy
Sid
solución simple y rápida, +1 para esta respuesta.
CAMINANTE
1
Gracias a @sethbc, @datasmid! Necesitaba GIT_CURL_VERBOSE = 1 para depurar y GIT_SSL_NO_VERIFY = true para omitir la verificación.
Henry Rivera
no trabaja conmigo ni siquiera con el GIT_SSL_NO_VERIFY var
keinabel
20

También podría editar el archivo .gitconfig ubicado en el directorio% userprofile% en el sistema Windows ( bloc de notas% userprofile% .gitconfig ) o en el directorio ~ en el sistema Linux ( vi ~ / .gitconfig ) y agregar una sección http como se muestra a continuación.

Contenido del archivo .gitconfig:

[http]
        proxy = http://proxy.mycompany:80
STB Land
fuente
20

Para mí, el git: // simplemente no funciona a través del proxy, aunque el https: // sí. Esto causó un poco de dolor de cabeza porque estaba ejecutando scripts que usaban git: // por lo que no podía cambiarlos fácilmente. Sin embargo encontré este GEM

git config --global url."https://github.com/".insteadOf git://github.com/
TonyT_32909023190
fuente
Gracias, esto ayudó mucho
dgrat
Sé que también tuve problemas para extraer de git: //. ¿Has considerado un problema clave de SSH? Mi problema se debió a una mala configuración de la clave SSH.
avazula
17

Esta es una pregunta antigua, pero si está en Windows, considere configurar HTTPS_PROXY también si está recuperando a través de una URL https. ¡Trabajó para mi!

Benjamin Wootton
fuente
2
Fue suficiente configurar https_proxyla variable de entorno solo (no se configuró la opción git global o proxy de repositorio) en mi caso (msysgit en Windows XP).
Piotr Dobrogost
13

No encuentro http.proxyni GIT_PROXY_COMMANDtrabajo para mi proxy HTTP autenticado. El proxy no se activa de ninguna manera. Pero encuentro una manera de evitar esto.

  1. Instale sacacorchos u otras alternativas que desee.
  2. Crea un archivo de autenticación. El formato para authfilees:, user_name:passwordy user_name, passwordes su nombre de usuario y contraseña para acceder a su proxy. Para crear el archivo tal, sólo tiene que ejecutar comandos como esto: echo "username:password" > ~/.ssh/authfile.

  3. Edite ~/.ssh/configy asegúrese de que su permiso sea 644:chmod 644 ~/.ssh/config

Tome github.com como ejemplo, agregue las siguientes líneas a ~/.ssh/config:

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

Ahora, cada vez que haga algo [email protected], usará el proxy automáticamente. También puede hacer lo mismo con Bitbucket fácilmente .

Esto no es tan elegante como otros enfoques, pero funciona como un encanto.

Carlosin
fuente
1
¿Puede explicar el paso 2, "crear un archivo de autenticación"? Parece que su enfoque es el único que funcionará para git: // urls.
nik
@NikBagdon Agregué más detalles al paso 2. Avíseme si hay algo que no está claro :)
Carlosin
11

En Windows, si no desea poner su contraseña en .gitconfig en texto plano, puede usar

Le autentica contra el proxy NTLM normal o incluso de Windows e inicia el proxy localhost sin autenticación.

Para que funcione:

  • Instalar Cntml
  • Configure Cntml de acuerdo con la documentación para pasar su autenticación de proxy
  • Apunte git a su nuevo proxy localhost:

    [http]
        proxy = http://localhost:3128       # change port as necessary
    
Boris Brodski
fuente
2
Por lo que vale, esta debería haber sido la respuesta aceptada, está en Windows. No hay un proxy transparente (de lo contrario no habría un problema.
Booyaa
9

Para mí lo que funcionó fue:

sudo apt-get install socat

Cree un archivo dentro de su $ BIN_PATH / gitproxy con:

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

No olvides darle permisos de ejecución

chmod a+x gitproxy

Ejecute los siguientes comandos para configurar el entorno:

export PATH=$BIN_PATH:$PATH
git config --global core.gitproxy gitproxy
Lesswire
fuente
1
Enlace a una explicación y un enlace a un resumen con actualizaciones del script (mini-): emilsit.net/blog/archives/…
Karl Richter
Esta respuesta es la única que funciona para las git://URL de protocolo, para los servidores git (raros) que no admiten https. También funciona en Windows, con un archivo por lotes apropiado y Socat para Windows.
davenpcj
8

Configurar proxy para git

mando

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

ejemplo

git config --global http.proxy http://clairton:[email protected]:8080
Clairton Luz
fuente
7

Establezca Git credential.helper en wincred.

git config --global credential.helper wincred

Asegúrese de que solo haya 1 credencial.

git config -l

Si hay más de 1 y no está configurado para wincred eliminarlo.

git config --system --unset credential.helper

Ahora configure el proxy sin contraseña.

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

Verifique que todas las configuraciones que agregó se vean bien ...

git config --global -l

¡Ahora estás listo!

Thor88
fuente
6

Tuve el mismo problema, con una solución ligeramente diferente: RECONSTRUCCIÓN DE GIT CON SOPORTE HTTP

El git:protocolo no funcionó a través de mi firewall corporativo.

Por ejemplo, esto agotó el tiempo de espera:

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

curl github.comSin embargo, funciona bien, así que sé que mi http_proxyvariable de entorno es correcta.

Intenté usar http, como a continuación, pero recibí un error inmediato.

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

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

Intenté recompilar git así:

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

pero aún tiene el error fatal.

Finalmente, después de varias horas frustrantes, leí el archivo de configuración y vi esto:

# Defina CURLDIR = / foo / bar si el encabezado de rizo y los archivos de la biblioteca están en

# / foo / bar / include y / foo / bar / lib directorios.

Entonces recordé que no había cumplido curldesde el origen, y así fui a buscar los archivos de encabezado. Efectivamente, no fueron instalados. Ese fue el problema. Make no se quejó de los archivos de encabezado faltantes. Así que no me di cuenta de que la --with-curlopción no hacía nada (es, de hecho, el valor predeterminado en mi versión degit ).

Hice lo siguiente para solucionarlo:

  1. Se agregaron los encabezados necesarios para hacer:

    yum install curl-devel
    (expat-devel-1.95.8-8.3.el5_5.3.i386  was already installed).
    
  2. Eliminado gitde /usr/local(ya que quiero que la nueva instalación viva allí).

    I simplemente eliminado git*desde /usr/local/sharey/usr/local/libexec

  3. Busqué los directorios de inclusión que contienen los archivos de encabezado curly expat, y luego (porque lo había leído configure) los agregué al entorno de la siguiente manera:

    export CURLDIR=/usr/include 
    export EXPATDIR=/usr/include
    
  4. Funcionó configurecon las siguientes opciones, que, nuevamente, se describieron en el configurearchivo en sí, y también fueron los valores predeterminados, pero qué diablos:

    ./configure  --with-curl --with-expat
    
  5. Y ahora httpfunciona con gitmi 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
fuente
Me alegra que haya presentado esto, no me di cuenta de que el protocolo git no se estaba manejando en mi proxy de calamar
rupert160
5

Esto me funcionó.

git config --global http.proxy proxy_user:proxy_passwd@proxy_ip:proxy_port
Vagner Nogueira
fuente
3

puedes usar:

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

Usar proxychains

proxychains git pull ...

actualización: proxychains se suspende, use proxychains-ng en su lugar.

fangxing
fuente
desafortunadamente solo Unix
Samoth
2
@Samoth Jun, para Windows que quieras probar SocksCap64
fangxing
2

Para ventanas

Ir a -> C: / Usuarios / nombre_de_usuario / gitconfig

Actualice el archivo gitconfig con los siguientes detalles

[http]

[https]

proxy = https://your_proxy:your_port

[http]

proxy = http://your_proxy:your_port

¿Cómo verificar su proxy y número de puerto?

Internet Explorer -> Configuración -> Opciones de Internet -> Conexiones -> Configuración de LAN

Niño de la escuela
fuente
2

El siguiente método funciona para mí:

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 de Zsh: modifique su archivo ~ / .zshenv en lugar de ~ / .bash_profile.
  • Nota de Ubuntu y Fedora: Modifique su archivo ~ / .bashrc en lugar de ~ / .bash_profile.
Nguyen Van Duc
fuente
2

Vale la pena mencionar: la mayoría de los ejemplos en la red muestran ejemplos como

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

Parece que si su proxy necesita autenticación, debe dejar la contraseña de su empresa en la configuración de git. Lo cual no es realmente genial.

Pero, si solo configura el usuario sin contraseña:

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

Parece que Git (al menos en mi máquina Windows sin credenciales-ayudante) reconoce eso y solicita la contraseña de proxy en el acceso repo.

gratinierer
fuente
Eres mi hombre, ya que el nombre de usuario y la contraseña de mi empresa tienen tantos símbolos especiales que era imposible codificar y transmitir. Con este "escamotage" pude proporcionar la contraseña en la cara del clon o en cualquier otro paso después de haber configurado la dirección proxy.
Carmine Tambascia
1

Esto no es un problema con su proxy. Es un problema con github (o git). También me falla en git-1.6.0.1 en linux. El error ya ha sido informado (por usted no menos).

Asegúrese de eliminar sus empanadas, ya están en google. Editar: Debe haber estado soñando, supongo que no puedes eliminarlos. ¿Usar Gist en su lugar?

sethbc
fuente
Publiqué en github y msysGit también porque no estaba seguro de dónde estaba el problema. Parece que no puedo eliminar las empanadas, desafortunadamente.
James A. Rosen
1

Las respuestas anteriores funcionaron para mí cuando mi proxy no necesita autenticación. Si está utilizando un proxy que requiere que se autentique, puede probar CCProxy. Tengo un pequeño tutorial sobre cómo configurarlo aquí,

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

Pude empujar, tirar, crear nuevos repositorios. Todo funcionó bien. Asegúrese de hacer una desinstalación limpia y reinstalar la nueva versión si tiene problemas con Git como lo hice yo.

Praveen
fuente
1

como @ user2188765 ya ha señalado, intente reemplazar el git://protocolo del repositorio con http[s]://. Ver también esta respuesta

DomTomCat
fuente
0

Eludí el proxy usando https ... algunos servidores proxy ni siquiera comprueban 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
fuente
0

Como esto fue respondido por muchos, pero esto es solo para el USUARIO de Winodws que está detrás del proxy con autenticación.

Reinstalación (primer error, no eliminar).

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"

si tiene algún carácter especial en user / pass use url_encode

Ravi Parekh
fuente