是否可以将git配置为仅对特定域使用代理?
我想使用我们的公司代理来访问Github,但是不能访问我们自己的内部git存储库。
我正在使用bower,它需要在我们的防火墙和github上都需要这些项目,所以我不能将它作为每个项目设置。它需要是某种全局配置选项。有什么想法吗?
答案 0 :(得分:60)
为了增加另一种可能性,您可以define a proxy through the git config http.proxy
。
git config --global http.proxy http://mydomain\\myusername:mypassword@myproxyserver:proxyport
但真正的是,starting git1.8.5 (October 2013),您可以为每个网址设置http设置。
现在可以根据配置适用的网址指定“http.*
”变量。
例如,
[http]
sslVerify = true
[http "https://weak.example.com/"]
sslVerify = false
只有在与指定网站交谈时才会关闭
http.sslVerify
。
$ 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。 E.g
$ git config --get-urlmatch http https://weak.example.com
http.sslverify false
所有细节都在commit 6a56993b:
http.<url>.*::
上面的任何http。*选项都可以有选择地应用于某些网址 对于匹配URL的配置键,将按以下顺序将配置键的每个元素与URL的元素进行比较:
https
中的https://example.com/
)。example.com
中的https://example.com/
)。8080
中的http://example.com:8080/
)。repo.git
中的https://example.com/repo.git
)。 user
中的https://user@example.com/repo.git
)上面的列表按优先顺序排序;与配置密钥路径匹配的URL优先于与其用户名匹配的URL 例如,如果网址为
https://user@example.com/foo/bar
,则https://example.com/foo
的配置密钥匹配将优先于https://user@example.com
的配置密钥匹配。在尝试任何匹配之前,所有URL都已规范化(密码部分,如果嵌入在URL中,为了匹配目的总是被忽略),以便简单拼写的等效网址将正确匹配。
环境变量设置始终覆盖任何匹配 匹配的网址是直接给予Git命令的网址 这意味着由于重定向而访问的任何URL +都不参与匹配。
答案 1 :(得分:48)
我通常使用环境变量:
http_proxy=http://username:password@proxydomain:port
https_proxy=http://username:password@proxydomain:port
访问GitHub仓库时,git会选择它。
注意:
http_proxy
和https_proxy
必须使用代理的 http://
网址(否https://
)。proxydomain
的{{3}}(不要依赖其简称)但是对于内部回购,我所要做的就是定义并导出另外一个环境变量:
no_proxy=.my.company,localhost,127.0.0.1,::1
,用于访问任何地址为myrepo.my.company
或localhost的仓库。您可以定义NO_PROXY
或no_proxy
,这无关紧要。
但为了以防万一,我总是设置HTTP_PROXY
,HTTPS_PROXY
,http_proxy
,https_proxy
,NO_PROXY
和no_proxy
。
答案 2 :(得分:30)
正如有些人在这里提到的那样,您可以通过指定URL和代理设置来完成此操作,但以下是修复此问题的用例。感谢上面的VonC!
请注意,我指定了Git服务器的根目录。您所克隆的git repo的完整路径并不是必需的。您可以使用单个条目来处理整个服务器。
将以下内容添加到.gitconfig文件中。在我的Windows系统上,我使用%userprofile%\。gitconfig
[http]
proxy = http://my.proxy.net:8080
[https]
proxy = http://my.proxy.net:8443
[http "http://my.internalgitserver.com/"]
proxy = ""
答案 3 :(得分:13)
您可以专门为每个遥控器调整各种配置选项。我们假设我们有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-matching (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
答案 4 :(得分:6)
假设您的代理人(例如我的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
答案 5 :(得分:0)
我有一个类似的问题,我在公司代理后面。我基本上有两种存储库:
我必须在全局配置中设置一个代理,如果没有在本地配置中另外指定,它将作为默认设置。
以下是用于配置的命令:
使用代理设置全局配置
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
答案 6 :(得分:-1)
在Windows上,简单[注意无密码]以下为我工作
git config --global http.proxy http://mydomain\\myusername:@myproxyserver:proxyport
git config --global https.proxy http://mydomain\\myusername:@myproxyserver:proxyport