Est-il possible de configurer git pour utiliser un proxy uniquement pour des domaines spécifiques?
J'aimerais utiliser notre proxy d'entreprise pour accéder à Github, mais laissez-le désactivé pour accéder à nos propres git repos internes.
J'utilise bower et il doit nécessiter des éléments à la fois dans notre pare-feu et sur github, donc je ne peux pas le faire en tant que paramètre par projet. Il doit s'agir d'une sorte d'option de configuration globale. Des pensées?
J'utilise généralement les variables d'environnement:
http_proxy=http://username:password@proxydomain:port
https_proxy=http://username:password@proxydomain:port
Cela est récupéré par git lors de l'accès au dépôt GitHub.
Remarque:
http_proxy
et https_proxy
doit utiliser le http://
URL du proxy (pas de https://
).proxydomain
(ne vous fiez pas à son nom court)Mais pour le dépôt interne, tout ce que j'ai à faire est de définir et d'exporter une variable d'environnement supplémentaire:
no_proxy=.my.company,localhost,127.0.0.1,::1
, pour accéder à n'importe quel référentiel avec une adresse comme myrepo.my.company
ou localhost.Vous pouvez définir NO_PROXY
ou no_proxy
, ça n'a pas d'importance.
Mais au cas où, je définirais toujours HTTP_PROXY
, HTTPS_PROXY
, http_proxy
, https_proxy
, NO_PROXY
et no_proxy
.
Pour ajouter une autre possibilité, vous pouvez définir un proxy via le git config http.proxy
.
git config --global http.proxy http://mydomain\\myusername:mypassword@myproxyserver:proxyport
Mais ce qui est vraiment bien c'est, à partir de git1.8.5 (octobre 2013) , vous pouvez définir les paramètres http par URL .
Le "http.*
"les variables 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
désactivé 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
<section>
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.<url>.*::
Chacune des options http. * Ci-dessus peut être appliquée 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:
https
in https://example.com/
).example.com
dans https://example.com/
).8080
dans http://example.com:8080/
).repo.git
dans https://example.com/repo.git
).user
in https://[email protected]/repo.git
)La liste ci-dessus est classée par ordre décroissant de priorité; une URL qui correspond au chemin d'une clé de configuration est préférée à celle qui correspond à son nom d'utilisateur.
Par exemple, si l'URL esthttps://[email protected]/foo/bar
une correspondance de clé de configuration dehttps://example.com/foo
sera préféré à une correspondance de clé de configuration dehttps://[email protected]
.Toutes les URL sont normalisées avant de tenter toute correspondance (la partie mot de passe, si elle est intégrée dans l'URL, est toujours ignorée à des fins de correspondance) afin que les URL équivalentes simplement orthographiées différemment correspondent correctement.
Les paramètres des variables d'environnement remplacent toujours toutes les correspondances .
Les URL qui sont comparées sont celles données directement aux commandes Git.
Cela signifie que les URL + visitées à la suite d'une redirection ne participent pas à la correspondance.
Comme certains l'ont mentionné ici, vous pouvez le faire en spécifiant une URL avec les paramètres de 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 complet vers le dépôt git que vous avez cloné n'est pas requis. Vous pouvez utiliser une seule entrée pour prendre soin de l'ensemble 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 spécifiquement différentes options de configuration pour chaque télécommande. Disons que nous avons 2 télécommandes, nommées Origin
et upstream
respectivement. Vous ajustez le proxy pour chacun en procédant comme suit:
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 à l'intérieur de votre configuration dépôt local (.git/config
).
Vous pouvez également ajuster les options configuration globale si vous le souhaitez. Puisqu'il n'est pas logique de référencer un nom distant dans le fichier de configuration global ($HOME/.gitconfig
), vous pouvez utiliser correspondance d'url (IIRC, pris 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é défini:
git config --path --get-urlmatch https://example.com/repo1.git
git config --path --get-urlmatch https://example.com/repo2.git
J'ai eu un problème similaire, où je suis derrière mon mandataire d'entreprise. J'ai essentiellement deux types de référentiels:
J'ai dû définir un proxy dans la configuration globale, qui agirait par défaut, sauf indication contraire dans la configuration locale.
Voici donc les commandes de configuration:
définir la configuration globale avec proxy
git config --global --add http.proxy "http://username:password@proxydomain:port"
git config --global --add https.proxy "https://username:password@proxydomain:port"
puis déplacez-vous vers votre répertoire local qui contient votre dossier .git et pour lequel vous n'avez pas besoin de proxy
cd "C:\Users\username\directory_without_proxy\"
définir la configuration locale avec un proxy vide
git config --local --add http.proxy ""
git config --local --add https.proxy ""
Cela pourrait aussi se faire dans l'autre sens. Autrement dit, vous conservez la configuration globale en tant que configuration locale vide et avec vos paramètres de proxy.
Juste pour vérifier, vous pouvez utiliser la commande ci-dessous pour répertorier les paramètres de configuration pour global et local respectivement:
git config --global --list
git config --local --list