为不同主机设置不同的 Git 代理规则
Git 的按 URL 区分的 HTTP 配置可以让内部服务直连,同时在别处保留代理。请针对具体 URL 检查匹配结果。
同一份 Git 配置可以服务两条截然不同的路径:一条经由已批准的代理访问外部主机,另一条直接访问内部主机。你不必每次切换仓库都去修改全局默认值。
Git 支持按 URL 区分的 HTTP 配置。例如:
[http]
proxy = http://proxy.example:8080
[http "https://git.office.example/"]
proxy =
对于允许使用公共代理的外部公共仓库,HTTP 代理列表可为默认端点提供候选。空值是对匹配 URL 的显式覆盖,这与删除那个更具体的键不同——删除可能让通用代理重新生效。
匹配 Git 实际使用的 URL
协议、主机名、端口、路径以及可选的用户名都参与文档所述的匹配规则。不要把 URL 子节当作通用的 shell 通配表达式。更窄的路径规则可能胜过更宽的主机规则。
若只想查看匹配到的代理配置:
git config --get-urlmatch http.proxy https://git.office.example/team/project.git
这只是检查配置匹配。它不是网络测试,也不能证明该路径可达。还要考虑其他配置作用域以及相关的环境设置。
重定向不是新的配置匹配
Git 的文档指出,参与匹配的 URL 是直接交给 Git 命令的那些;因重定向而访问的 URL 不参与该匹配。如果第一个主机把下载重定向到别处,请记住这一限制。
路径还应与传输方式匹配。SSH 远程仓库不会仅仅因为同一服务提供 HTTPS 网站就受HTTP URL 子节管辖。
保持少量有意的规则,然后针对代表性 URL 检查结果。全局、仓库本地和按 URL 区分的代理条目长期堆积,会比你想表达的网络区分难推理得多。