如何设置git使其与需要不同代理的remote一起工作?

r6l8ljro  于 2023-01-11  发布在  Git
关注(0)|答案(2)|浏览(115)

我在公共网站www.example.com上使用了一些回购协议github.com,需要从工作中使用代理服务器。
我在我们的企业Github示例中有其他回购协议,这些协议在防火墙后面,当定向到我们的代理时会失败。
管理多个代理的最佳方式是什么?我可以使用git config --global,沿着设置http.proxyhttps.proxy密钥到代理来连接github.com repos,但随后Enterprise Github被破坏,我必须清除这些密钥才能让它重新工作。
如何管理这两个需要不同代理设置的源而不手动更改代理?每次切换项目时是否都要使用脚本?

5sxhfpxr

5sxhfpxr1#

正如我在“Only use a proxy for certain git urls/domains?“中所解释的,您可以只为github.com设置代理。
但是对于您的情况,我将坚持使用经典的HTTP(S)_PROXY环境变量(不需要git config命令)
只需添加一个NO_PROXY环境变量,其中包含您的私有Git托管服务器的域,Git就不会在从该私有服务器克隆/推送/拉取时使用代理。

set NO_PROXY=.myserver.org
icnyk63a

icnyk63a2#

the link VonC gave to this question开始,我就能够将正确的命令组合在一起来完成这个任务,但是这些答案非常复杂(有时候很难理解正确的语法),所以我想在这里为后代总结一下我的答案:

溶液1:仅将代理应用于外部站点

One solution is to setup only github.com for the proxy with:

> git config --global http.https://github.com.proxy http://[user:pass@]<proxy URL>:<port>
> git config --global https.https://github.com.proxy http://[user:pass@]<proxy URL>:<port>

这看起来有点奇怪,因为你把https://github.com嵌入到了普通的http.proxy语句的中间,这就是你创建一个连接到特定站点的代理的方法。

溶液2:将代理应用于所有站点,但删除内部站点的代理

或者,您可以为所有站点配置代理,然后只删除内部Github站点的代理:

> git config --global http.proxy http://[user:pass@]<proxy URL>:<port>
> git config --global https.proxy http://[user:pass@]<proxy URL>:<port>

这会将代理应用于所有内容,然后执行以下操作来告诉Git不要为您的内部Git站点使用代理:

> git config --global http.<Git Site URL>.proxy ""
> git config --global https.<Git Site URL>.proxy ""

其中<Git Site URL>是完全限定的域名,例如http://github.mycompany.com-您在浏览器中键入的内容。

注解

1.* * 对于http.proxyhttps.proxy,代理地址必须是http://proxy:port,而不是https://proxy:port(即只能是http,不能是https)**。
1.还有其他可能的解决方案,比如只为某些本地存储库设置代理,而不是全局设置,或者只为给定的远程存储库设置代理(假设您有一个具有2个远程存储库的存储库,一个是外部的,另一个是内部的),但我将把这些留给读者来确定......

相关问题