仅对某些git urls / domains使用代理?

时间:2013-04-17 18:34:34

标签: git github proxy

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

我想使用我们的公司代理来访问Github,但是不能访问我们自己的内部git存储库。

我正在使用bower,它需要在我们的防火墙和github上都需要这些项目,所以我不能将它作为每个项目设置。它需要是某种全局配置选项。有什么想法吗?

7 个答案:

答案 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


请参阅commit 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。 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_proxyhttps_proxy必须使用代理的 http:// 网址(否https://)。
  • 始终使用proxydomain的{​​{3}}(不要依赖其简称)

但是对于内部回购,我所要做的就是定义并导出另外一个环境变量:

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

您可以定义NO_PROXYno_proxy,这无关紧要。

但为了以防万一,我总是设置HTTP_PROXYHTTPS_PROXYhttp_proxyhttps_proxyNO_PROXYno_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个遥控器,分别名为originupstream。您可以为每个执行以下操作调整代理:

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代理

  • 全部
    • 添加git config --global http.proxy socks5://127.0.0.1:1086
    • 删除git config --global --unset http.proxy
  • 仅适用于特定域,例如:https://github.com
    • 添加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)

我有一个类似的问题,我在公司代理后面。我基本上有两种存储库:

  1. 外部-需要代理
  2. 内部-不需要代理

我必须在全局配置中设置一个代理,如果没有在本地配置中另外指定,它将作为默认设置。

以下是用于配置的命令:

使用代理设置全局配置

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