Utilisez uniquement un proxy pour certains URL / domaines git?

Est-il possible de configurer git pour utiliser un proxy seulement pour des domaines spécifiques?

J’aimerais utiliser notre proxy d’entreprise pour accéder à Github, mais laissez-le pour accéder à nos propres repositorys de repository internes.

J’utilise bower et il doit exiger des éléments à la fois dans notre pare-feu et sur github, donc je ne peux pas le faire pour chaque projet. Il doit s’agir d’une sorte d’option de configuration globale. Des pensées?

J’utilise habituellement les variables d’environnement:

  • http_proxy=http://username:password@proxydomain:port
  • https_proxy=http://username:password@proxydomain:port

Cela est capté par git lors de l’access au repository GitHub.

Remarque:

  • http_proxy et https_proxy doivent utiliser l’URL http:// du proxy (pas https:// ).
  • utilisez toujours le nom complet de proxydomain (ne vous fiez pas à son nom abrégé)

Mais pour le référentiel interne, il me suffit de définir et d’exporter une autre variable d’environnement:

  • no_proxy=.my.company,localhost,127.0.0.1,::1 , pour accéder à tout repository avec une adresse comme myrepo.my.company ou localhost.

Vous pouvez définir NO_PROXY ou no_proxy , peu importe.

Mais juste au cas où, je règle toujours HTTP_PROXY , HTTPS_PROXY , http_proxy , https_proxy , NO_PROXY et no_proxy .

Pour append une autre possibilité, vous pouvez définir un proxy via git config http.proxy .

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

Mais ce qui est vraiment bien, à partir de git1.8.5 (octobre 2013) , vous pouvez définir les parameters http par URL .

Les variables ” http.* ” Peuvent maintenant être spécifiées par URL que la configuration applique .
Par exemple,

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

retournerait http.sslVerify uniquement lorsque vous parlez à ce site spécifié.


Voir 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 

Avec seulement

spécifié, vous pouvez obtenir une liste de toutes les variables de la section avec leurs valeurs qui s’appliquent à l’URL donnée. Par exemple

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

Tous les détails sont dans commit 6a56993b :

 http..*:: 

Toutes les options http. * Ci-dessus peuvent être appliquées de manière sélective à certaines URL.
Pour qu’une clé de configuration corresponde à une URL, chaque élément de la clé de configuration est comparé à celui de l’URL, dans l’ordre suivant:

  • Schéma (par exemple, https https://example.com/ ).
  • Nom d’hôte / nom de domaine (par exemple, example.com dans https://example.com/ ).
  • Numéro de port (par exemple, 8080 dans http://example.com:8080/ ).
  • Chemin d’access (par exemple, repo.git dans https://example.com/repo.git ).
  • Nom d’utilisateur (par exemple, user dans https://user@example.com/repo.git )

La liste ci-dessus est ordonnée par priorité décroissante; une URL qui correspond au chemin d’access d’une clé de configuration est préférable à celle qui correspond à son nom d’utilisateur.
Par exemple, si l’URL est https://user@example.com/foo/bar une correspondance de clé de configuration de https://example.com/foo sera préférée à une correspondance de clé de configuration de https://user@example.com .

Toutes les URL sont normalisées avant de tenter une correspondance (la partie mot de passe, si elle est intégrée à l’URL, est toujours ignorée à des fins de correspondance) afin que les URL équivalentes simplement épelées puissent correspondre correctement.

Les parameters de variable d’environnement remplacent toujours les correspondances .
Les URL qui correspondent sont celles directement atsortingbuées aux commandes Git.
Cela signifie que les URL + visitées suite à une redirection ne participent pas à la correspondance.

Comme certains l’ont mentionné ici, vous pouvez le faire en spécifiant une URL avec les parameters du proxy, mais voici le cas d’utilisation qui a résolu ce problème pour moi. Merci à VonC ci-dessus!

Notez ci-dessous que je spécifie la racine du serveur Git. Le chemin d’access complet au repository git que vous avez cloné n’est pas requirejs. Vous pouvez utiliser une seule entrée pour prendre en charge l’intégralité du serveur.

Ajoutez ce qui suit à votre fichier .gitconfig. Sur mon système Windows, j’utilise% userprofile% \. Gitconfig

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

Vous pouvez ajuster diverses options de configuration pour chaque télécommande en particulier. Disons que nous avons 2 télécommandes, nommées origin et upstream respectivement. Vous ajustez le proxy pour chacun des éléments suivants:

 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 

Cela changera les sections de chaque télécommande dans la configuration de votre référentiel local ( .git/config ).

Vous pouvez également ajuster les options de configuration globales si vous le souhaitez. Comme il n’est pas logique de faire référence à un nom distant dans le fichier de configuration global ( $HOME/.gitconfig ), vous pouvez utiliser la correspondance d’URL (IIRC, prise en charge depuis Git 1.8.5). Exemple:

 [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 vous voulez voir ce qui a été mis en place:

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

Sur Windows, Simplement [note sans mot de passe] suivant a fonctionné pour moi

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