2013-04-17 10 views
36

È possibile configurare git per utilizzare un proxy solo per domini specifici?Utilizzare solo un proxy per determinati URL/domini git?

Mi piacerebbe utilizzare il nostro proxy aziendale per accedere a Github ma lasciarlo fuori per accedere ai nostri repository git interni.

Sto utilizzando bower e ha bisogno di richiedere elementi sia all'interno del nostro firewall che su github, quindi non posso farlo come impostazione di progetto. Deve essere una sorta di opzione di configurazione globale. qualche idea?

risposta

35

Io di solito uso le variabili di ambiente:

che viene prelevato dal git quando si accede GitHub pronti contro termine.

Nota:

  • sia http_proxy e https_proxy deve utilizzare il http:// URL del proxy (senza https://).
  • utilizzare sempre la fqn (full qualified name) di proxydomain (non fare affidamento sul suo nome breve)

Ma per repo interno, tutto quello che devo fare è definire ed esportare più una variabile di ambiente:

  • no_proxy=.my.company,localhost,127.0.0.1,::1, per accedere a qualsiasi repository con un indirizzo come myrepo.my.company o localhost.

È possibile definire NO_PROXY o no_proxy, non importa.

Ma nel caso, ho sempre impostato HTTP_PROXY, HTTPS_PROXY, http_proxy, https_proxy, NO_PROXY e no_proxy.

+2

I. amore. tu!!! – robdodson

+0

Nel mio caso, non ha funzionato fino a quando non ho provato a rimuovere 'http: //' sia per http che per https. –

+0

no_proxy non dovrebbe usare * per la corrispondenza selvaggia, usare .mycompany.com invece funzionerà. –

51

Per aggiungere un'altra possibilità, è possibile .

git config --global http.proxy http://mydomain\\myusername:[email protected]:proxyport 

Ma ciò che è veramente pulito è, starting git1.8.5 (October 2013), è possibile impostazioni set HTTP al url.

Le variabili "http.*" ora possono essere specificate per URL a cui si applica la configurazione.
Per esempio,

[http] 
    sslVerify = true 
[http "https://weak.example.com/"] 
    sslVerify = false 

sarebbe capovolgere http.sslVerify fuori solo quando si parla di quel sito specificato.


Vedi commit 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> specificato, è possibile ottenere un elenco di tutte le variabili nella sezione con i loro valori che si applicano alla data URL. Per esempio

$ git config --get-urlmatch http https://weak.example.com 
http.sslverify false 

Tutti i dettagli sono in commit 6a56993b:.

http.<url>.*:: 

Qualsiasi della http * opzioni di cui sopra può essere applicato selettivamente ad alcuni URL.
Per una chiave di configurazione per abbinare un URL, ogni elemento della chiave di configurazione viene confrontato con quello dell'URL, nel seguente ordine:

  • Scheme (ad esempio, in httpshttps://example.com/).
  • Host nome/dominio (per esempio, in example.comhttps://example.com/).
  • Numero porta (ad esempio 8080 in http://example.com:8080/).
  • Percorso (ad esempio repo.git in https://example.com/repo.git).
  • nome utente (ad esempio, in userhttps://[email protected]/repo.git)

La lista di cui sopra è ordinata per priorità decrescente; un URL che corrisponde al percorso di una chiave di configurazione è preferito a quello che corrisponde al suo nome utente.
Ad esempio, se l'URL è https://[email protected]/foo/bar, verrà preferita una corrispondenza chiave di chiave https://example.com/foo su una corrispondenza chiave di configurazione di https://[email protected].

Tutti gli URL vengono normalizzati prima di tentare un abbinamento (la parte password, se inserita nell'URL, viene sempre ignorata per scopi di corrispondenza) in modo che gli URL equivalenti che vengono semplicemente digitati in modo diverso corrispondano correttamente.

Le impostazioni delle variabili di ambiente ignorano sempre le corrispondenze.
Gli URL confrontati sono quelli dati direttamente ai comandi Git.
Ciò significa che tutti gli URL + visitati come risultato di un reindirizzamento non partecipano all'abbinamento.

+0

Per rendere dominio specifico NON utilizzare le impostazioni del proxy, è necessario impostare 'http.proxy =" "' – imanuelcostigan

+0

Come si può utilizzare un carattere jolly come * .mycompany.com per abbinare tutti i sottodomini? – bbodenmiller

+0

Questo è stato enorme per me. Grazie molto! – Artif3x

-1

In Windows, semplicemente [nota senza la password] In seguito ha lavorato per me

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

git config --global https.proxy http://mydomain\\myusername:@myproxyserver:proxyport 
8

È possibile regolare diverse opzioni di configurazione per ogni distanza specificamente.Supponiamo di avere 2 telecomandi, denominati rispettivamente origin e upstream. Di regolare il proxy per ciascun modo seguente:

git config --path remote.origin.proxy http://user:[email protected]_for_origin:8080 
git config --path remote.upstream.proxy http://user:[email protected]_for_upstream:8080 

Questo cambierà le sezioni di ogni remoto all'interno del vostro configurazione locale repository (.git/config).

Se lo si desidera, è inoltre possibile regolare le opzioni di configurazione globale . Poiché non ha senso fare riferimento a un nome remoto nel file di configurazione globale ($HOME/.gitconfig), è possibile utilizzare corrispondenza di URL (IIRC, supportato da Git 1.8.5). Esempio:

[http "https://example.com/repo1.git"] 
    proxy = http://user:[email protected]:8080 
[http "https://example.com/repo2.git"] 
    proxy = http://user:[email protected]:8080 

Se volete vedere ciò che è stato impostato:

git config --path --get-urlmatch https://example.com/repo1.git 
git config --path --get-urlmatch https://example.com/repo2.git 
18

Come altri hanno già detto qui, si può fare questo specificando un URL con le impostazioni del proxy, ma qui è il caso d'uso quello ha riparato questo per me. Grazie a VonC sopra!

Avviso di seguito che sto specificando la radice del server Git. Non è richiesto il percorso completo per il repository git che hai clonato. È possibile utilizzare una singola voce per occuparsi dell'intero server.

Aggiungere quanto segue al file .gitconfig. Sul mio sistema Windows, sto usando% userprofile% \. Gitconfig

[http] 
    proxy = http://my.proxy.net:8080 
[https] 
    proxy = http://my.proxy.net:8443 
[http "http://my.internalgitserver.com/"] 
    proxy = "" 
+2

Siete i benvenuti. +1. Nota che potresti aver impostato la variabile di ambiente di Windows 'NO_PROXY' su' my.internalgitserver.com', e che avrebbe potuto essere sufficiente per non usare il proxy definito: http://stackoverflow.com/a/27229920/6309 – VonC

+0

Grazie , VonC. Mi trovo in una situazione in cui sto creando diversi file di configurazione dei modelli per vari strumenti proxy (git, bower, npm) e li inoltro ai membri del team. Sebbene tu abbia ragione sull'impostazione NO_PROXY, non è stato necessario nel mio caso e la semplicità di averli tutti in un unico file che posso distribuire è ciò che cercavo. – Artif3x

+0

Buon punto. La distribuzione di un file è più semplice delle variabili di ambiente. – VonC

Problemi correlati