关于github:只对某些git urls / domains使用代理?

Only use a proxy for certain git urls/domains?

是否可以将Git配置为仅对特定域使用代理?

我想使用我们的公司代理访问GitHub,但为了访问我们自己的内部Git回购,请不要使用它。

我使用的是Bower,它需要在防火墙和Github上都有项目,所以我不能按照项目设置来做。它需要某种全局配置选项。有什么想法吗?


要添加另一种可能性,您可以通过git config http.proxy定义代理。

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

但真正有趣的是,从Git1.8.5(2013年10月)开始,您可以为每个URL设置HTTP设置。

"http.*变量现在可以根据配置应用的URL来指定。例如,

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 is https://[email protected]/foo/bar a config key match of https://example.com/foo will be preferred over a config key match of https://[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_proxyhttps_proxy都必须使用代理服务器的http://URL(没有https://)。
  • 始终使用proxydomain的fqn(全名)(不要依赖其简称)

但是对于内部回购,我要做的就是定义和导出一个以上的环境变量:

  • no_proxy=.my.company,localhost,127.0.0.1,::1,用于访问地址为myrepo.my.company或localhost的任何repo。

您可以定义NO_PROXYNO_PROXY,这并不重要。

但为了以防万一,我总是设置http_proxyhttps_proxyhttp_proxyhttps_proxyNO_PROXYNO_PROXY


正如一些人在这里提到的,您可以通过指定一个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 =""


您可以专门为每个远程设备调整各种配置选项。假设我们有两个遥控器,分别命名为originupstream。每次执行以下操作时都要调整代理:

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

这将更改本地存储库配置(.git/config)中每个远程的部分。

如果愿意,还可以调整全局配置选项。由于在全局配置文件($HOME/.gitconfig中引用远程名称没有意义,因此可以使用URL匹配(iirc,Git 1.8.5支持)。例子:

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