是否可以将 git 配置为仅对特定域使用代理?
我想使用我们的公司代理来访问 Github,但不要使用它来访问我们自己的内部 git 存储库。
我正在使用凉亭,它需要在我们的防火墙和 github 上都需要项目,所以我不能将其作为每个项目设置来执行。它需要是某种全局配置选项。有什么想法吗?
要添加另一种可能性,您可以通过git config http.proxy
.
git config --global http.proxy http://mydomain\\myusername:mypassword@myproxyserver:proxyport
但真正整洁的是,从 git1.8.5 (October 2013) 开始,您可以为每个 url 设置 http 设置。
http.*
现在可以根据配置应用的 URL 指定“ ”变量。
例如,
[http]
sslVerify = true
[http "https://weak.example.com/"]
sslVerify = false
http.sslVerify
仅在与该指定站点交谈时才会关闭。
请参阅提交 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
仅
<section>
指定后,您可以获得该部分中所有变量的列表,其值适用于给定的 URL。例如
$ git config --get-urlmatch http https://weak.example.com
http.sslverify false
所有细节都在提交 6a56993b中:
http.<url>.*::
上面的任何 http.* 选项都可以选择性地应用于某些 url。
对于匹配 URL 的配置键,配置键的每个元素都会与 URL 的元素进行比较,顺序如下:
https
在 中https://example.com/
)。example.com
在 中https://example.com/
)。8080
在 中http://example.com:8080/
)。repo.git
在 中https://example.com/repo.git
)。user
in https://user@example.com/repo.git
)上面的列表按优先级递减排序;与配置键路径匹配的 URL 优先于与其用户名匹配的 URL。
例如,如果 URL 是https://user@example.com/foo/bar
的配置键匹配,https://example.com/foo
则将优先于 的配置键匹配https://user@example.com
。在尝试任何匹配之前,所有 URL 都会被规范化(密码部分,如果嵌入在 URL 中,出于匹配目的始终会被忽略),以便简单拼写不同的等效 url 将正确匹配。
环境变量设置总是覆盖任何匹配项。
匹配的 url 是直接提供给 Git 命令的那些。
这意味着由于重定向而+访问的任何 URL 都不参与匹配。
我通常使用环境变量:
http_proxy=http://username:password@proxydomain:port
https_proxy=http://username:password@proxydomain:port
这是在访问 GitHub 存储库时由 git 获取的。
笔记:
http_proxy
必须https_proxy
使用http://
代理的 url (no https://
)。proxydomain
但是对于内部仓库,我所要做的就是定义并导出另外一个环境变量:
no_proxy=.my.company,localhost,127.0.0.1,::1
myrepo.my.company
, 用于访问具有类似localhost的地址的任何 repo 。你可以定义NO_PROXY
or no_proxy
,没关系。
但以防万一,我总是设置HTTP_PROXY
, HTTPS_PROXY
, http_proxy
, https_proxy
,NO_PROXY
和no_proxy
.
正如一些人在这里提到的,您可以通过指定 URL 和代理设置来做到这一点,但这是为我解决此问题的用例。感谢上面的VonC!
请注意,下面我指定了 Git 服务器的根目录。您克隆的 git 存储库的完整路径不是必需的。您可以使用单个条目来处理整个服务器。
将以下内容添加到您的 .gitconfig 文件中。在我的 Windows 系统上,我正在使用 %userprofile%\.gitconfig
[http]
proxy = http://my.proxy.net:8080
[https]
proxy = http://my.proxy.net:8443
[http "http://my.internalgitserver.com/"]
proxy = ""
您可以专门为每个遥控器调整各种配置选项。假设我们有 2 个遥控器,分别命名为origin
和upstream
。您为每个执行以下操作调整代理:
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 起支持)。例子:
[http "https://example.com/repo1.git"]
proxy = http://user:pass@proxy1:8080
[http "https://example.com/repo2.git"]
proxy = http://user:pass@proxy2:8080
如果您想查看已设置的内容:
git config --path --get-urlmatch https://example.com/repo1.git
git config --path --get-urlmatch https://example.com/repo2.git
假设您的代理(如我的ss
)是:socks5://127.0.0.1:1086
git config --global http.proxy socks5://127.0.0.1:1086
git config --global --unset http.proxy
git config --global http.https://github.com.proxy socks5://127.0.0.1:1086
git config --global --unset http.https://github.com.proxy
添加代理后,使用
cat ~/.gitconfig
可以看到相关的全局配置:
[http]
proxy = socks5://127.0.0.1:1086
或者
[http "https://github.com"]
proxy = socks5://127.0.0.1:1086
我有一个类似的问题,我在我的公司代理后面。我基本上有两种存储库:
我必须在全局配置中设置一个代理,如果本地配置中没有另外指定,它将作为默认值。
下面是配置命令:
使用代理设置全局配置
git config --global --add http.proxy "http://username:password@proxydomain:port"
git config --global --add https.proxy "https://username:password@proxydomain:port"
然后移动到包含 .git 文件夹且不需要代理的本地目录
cd "C:\Users\username\directory_without_proxy\"
使用空代理设置本地配置
git config --local --add http.proxy ""
git config --local --add https.proxy ""
也可以通过其他方式完成。也就是说,您使用代理设置将全局配置保持为空和本地配置。
仔细检查一下,您可以使用以下命令分别列出全局和本地的配置设置:
git config --global --list
git config --local --list
在 Windows 上,只需 [note without password] 以下对我有用
git config --global http.proxy http://mydomain\\myusername:@myproxyserver:proxyport
git config --global https.proxy http://mydomain\\myusername:@myproxyserver:proxyport