remove - usar git con proxy
¿Solo usas un proxy para ciertas URL/dominios git? (5)
¿Es posible configurar git para usar un proxy solo para dominios específicos?
Me gustaría utilizar nuestro proxy corporativo para acceder a Github, pero no permitir que acceda a nuestros repositorios git internos.
Estoy usando bower y necesita elementos tanto dentro de nuestro firewall como en github, así que no puedo hacerlo como configuración de proyecto. Necesita ser algún tipo de opción de configuración global. ¿Alguna idea?
Como algunos han mencionado aquí, puede hacer esto especificando una URL junto con la configuración del proxy, pero aquí está el caso de uso que me solucionó esto. ¡Gracias a VonC arriba!
Observe a continuación que estoy especificando la raíz del servidor de Git. No se requiere la ruta completa al repositorio git que has clonado. Puede usar una sola entrada para ocuparse de todo el servidor.
Agregue lo siguiente a su archivo .gitconfig. En mi sistema de Windows, estoy usando% userprofile% /. Gitconfig
[http]
proxy = http://my.proxy.net:8080
[https]
proxy = http://my.proxy.net:8443
[http "http://my.internalgitserver.com/"]
proxy = ""
En Windows, simplemente [nota sin contraseña] siguiente funcionó para mí
git config --global http.proxy http://mydomain//myusername:@myproxyserver:proxyport
git config --global https.proxy http://mydomain//myusername:@myproxyserver:proxyport
Para agregar otra posibilidad, puede definir un proxy a través de la git config http.proxy
.
git config --global http.proxy http://mydomain//myusername:mypassword@myproxyserver:proxyport
Pero lo realmente bueno es que, a partir de git1.8.5 (octubre de 2013) , puede establecer la configuración de http por url .
Las variables " http.*
" Ahora se pueden especificar por URL a las que se aplica la configuración .
Por ejemplo,
[http]
sslVerify = true
[http "https://weak.example.com/"]
sslVerify = false
desactivaría
http.sslVerify
solo al hablar con ese sitio específico.
Consulte la confirmación d4770964d5 :
$ git config --bool --get-urlmatch http.sslVerify https://good.example.com
true
$ git config --bool --get-urlmatch http.sslVerify https://weak.example.com
false
Con solo
<section>
especificado, puede obtener una lista de todas las variables en la sección con sus valores que se aplican a la URL dada. P.ej
$ git config --get-urlmatch http https://weak.example.com
http.sslverify false
Todos los detalles están en commit 6a56993b :
http.<url>.*::
Cualquiera de las opciones http. * Anteriores se puede aplicar selectivamente a algunas URL.
Para que una clave de configuración coincida con una URL, cada elemento de la clave de configuración se compara con el de la URL, en el siguiente orden:
- Esquema (p. Ej.,
https
enhttps://example.com/
). - Nombre de host / dominio (por ejemplo,
example.com
enhttps://example.com/
). - Número de puerto (p. Ej.,
8080
enhttp://example.com:8080/
). - Ruta (por ejemplo,
repo.git
enhttps://example.com/repo.git
). - Nombre de usuario (por ejemplo,
user
enhttps://[email protected]/repo.git
)
La lista anterior se ordena disminuyendo la precedencia; una URL que coincida con la ruta de una clave de configuración es preferible a una que coincida con su nombre de usuario.
Por ejemplo, si la URL eshttps://[email protected]/foo/bar
una coincidencia de clave de configuración dehttps://example.com/foo
sobre una coincidencia de clave de configuración dehttps://[email protected]
.Todas las URL se normalizan antes de intentar cualquier coincidencia (la parte de la contraseña, si está incrustada en la URL, siempre se ignora para fines de coincidencia) para que las URL equivalentes que se escriben de forma diferente se correspondan correctamente.
La configuración de la variable de entorno siempre anula cualquier coincidencia .
Las direcciones URL que se comparan son las que se dan directamente a los comandos de Git.
Esto significa que cualquier URL + visitada como resultado de una redirección no participa en la coincidencia.
Puede ajustar varias opciones de configuración para cada control remoto específicamente. Digamos que tenemos 2 controles remotos, llamados origin
y upstream
respectivamente. Usted ajusta el proxy para cada uno haciendo lo siguiente:
git config --path remote.origin.proxy http://user:pass@proxy_for_origin:8080
git config --path remote.upstream.proxy http://user:pass@proxy_for_upstream:8080
Esto cambiará las secciones de cada control remoto dentro de su configuración de repositorio local ( .git/config
).
También puede ajustar las opciones de configuración global si lo desea. Como no tiene sentido hacer referencia a un nombre remoto en el archivo de configuración global ( $HOME/.gitconfig
), puede usar url-matching (IIRC, compatible desde Git 1.8.5). Ejemplo:
[http "https://example.com/repo1.git"]
proxy = http://user:pass@proxy1:8080
[http "https://example.com/repo2.git"]
proxy = http://user:pass@proxy2:8080
Si quieres ver lo que se ha configurado:
git config --path --get-urlmatch https://example.com/repo1.git
git config --path --get-urlmatch https://example.com/repo2.git
Usualmente uso las variables de entorno:
http_proxy=http://username:password@proxydomain:port
-
https_proxy=http://username:password@proxydomain:port
Eso es recogido por git cuando se accede al repositorio de GitHub.
Nota:
- tanto
http_proxy
comohttps_proxy
deben usarhttp://
url del proxy (nohttps://
). - siempre use fqn (nombre completo calificado) de
proxydomain
(no confíe en su nombre corto)
Pero para el repositorio interno, todo lo que tengo que hacer es definir y exportar una variable de entorno más:
-
no_proxy=.my.company,localhost,127.0.0.1,::1
, para acceder a cualquier repositorio con una dirección comomyrepo.my.company
o localhost.
Puede definir NO_PROXY
o no_proxy
, no importa.
Pero, por las HTTP_PROXY
, siempre configuro HTTP_PROXY
, HTTPS_PROXY
, http_proxy
, https_proxy
, NO_PROXY
y no_proxy
.