Only use a proxy for certain git urls/domains?
是否可以将Git配置为仅对特定域使用代理?
我想使用我们的公司代理访问GitHub,但为了访问我们自己的内部Git回购,请不要使用它。
我使用的是Bower,它需要在防火墙和Github上都有项目,所以我不能按照项目设置来做。它需要某种全局配置选项。有什么想法吗?
要添加另一种可能性,您可以通过
1 | git config --global http.proxy http://mydomain\\myusername:mypassword@myproxyserver:proxyport |
但真正有趣的是,从Git1.8.5(2013年10月)开始,您可以为每个URL设置HTTP设置。
"
1 2 3 4 | [http] sslVerify = true [http"https://weak.example.com/"] sslVerify = false |
号
would flip
http.sslVerify off only when talking to that specified site.
号
请参见提交D4770964D5:
1 2 3 4 | $ git config --bool --get-urlmatch http.sslVerify https://good.example.com true $ git config --bool --get-urlmatch http.sslVerify https://weak.example.com false |
With only
specified, you can get a list of all variables in the section with their values that apply to the given URL. E.g
号
1 2 | $ git config --get-urlmatch http https://weak.example.com http.sslverify false |
。
所有的细节都在提交6A56993B中:
1 | http.<url>.*:: |
Any of the http.* options above can be applied selectively to some urls.
For a config key to match a URL, each element of the config key is compared to that of the URL, in the following order:
号
- 方案(如
https://example.com/ 中的https )。 - 主机/域名(如
https://example.com/ 中的example.com )。 - 端口号(如
http://example.com:8080/ 中的8080 )。 - 路径(例如,
https://example.com/repo.git 中的repo.git )。 - 用户名(如
https://[email protected]/repo.git 中的user )
The list above is ordered by decreasing precedence; a URL that matches a config key's path is preferred to one that matches its user name.
For example, if the URL ishttps://[email protected]/foo/bar a config key match ofhttps://example.com/foo will be preferred over a config key match ofhttps://[email protected] .All URLs are normalized before attempting any matching (the password part, if embedded in the URL, is always ignored for matching purposes) so that equivalent urls that are simply spelled differently will match properly.
Environment variable settings always override any matches.
The urls that are matched against are those given directly to Git commands.
This means any URLs +visited as a result of a redirection do not participate in matching.
号
我通常使用环境变量:
http_proxy=http://username:password@proxydomain:port 。- 江户十一〔一〕号
这是Git在访问Github回购时获取的。
注:
http_proxy 和https_proxy 都必须使用代理服务器的http:// URL(没有https:// )。- 始终使用
proxydomain 的fqn(全名)(不要依赖其简称)
但是对于内部回购,我要做的就是定义和导出一个以上的环境变量:
no_proxy=.my.company,localhost,127.0.0.1,::1 ,用于访问地址为myrepo.my.company 或localhost的任何repo。
您可以定义
但为了以防万一,我总是设置
正如一些人在这里提到的,您可以通过指定一个URL和代理设置来实现这一点,但这里是为我修复这个问题的用例。感谢上面的VONC!
注意下面我指定的是git服务器的根目录。不需要您克隆的git repo的完整路径。您可以使用一个条目来管理整个服务器。
将以下内容添加到.gitconfig文件中。在我的Windows系统上,我正在使用%userprofile%.gitconfig
1 2 3 4 5 6 | [http] proxy = http://my.proxy.net:8080 [https] proxy = http://my.proxy.net:8443 [http"http://my.internalgitserver.com/"] proxy ="" |
您可以专门为每个远程设备调整各种配置选项。假设我们有两个遥控器,分别命名为
1 2 | 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 |
。
这将更改本地存储库配置(
如果愿意,还可以调整全局配置选项。由于在全局配置文件(
1 2 3 4 | [http"https://example.com/repo1.git"] proxy = http://user:pass@proxy1:8080 [http"https://example.com/repo2.git"] proxy = http://user:pass@proxy2:8080 |
如果要查看已设置的内容:
1 2 | git config --path --get-urlmatch https://example.com/repo1.git git config --path --get-urlmatch https://example.com/repo2.git |
。
在Windows上,只需[note without password]就可以了
1 2 3 | git config --global http.proxy http://mydomain\\myusername:@myproxyserver:proxyport git config --global https.proxy http://mydomain\\myusername:@myproxyserver:proxyport |
。