如何绕过我使用git config设置的http.proxy?

时间:2017-01-03 08:58:45

标签: git proxy

背景

我的工作电脑,我偶尔会在家里随身携带。现在,我们有一个代理服务器正在运行,我已通过执行git配置git config --global http.proxy http://proxy.company.com来使用它。所以当我回到家时,我不需要代理,所以我需要取消设置http.proxy。如果我必须偶尔做一次,这是可以的,但是现在我需要每天都这样做:设置代理,当我开始工作时,回家并取消设置代理,第二天再次设置它。

我需要什么

绕过已设置的http.proxy的方法,在每个命令中单独。类似于--no-proxy选项:

git --no-proxy pull

想要在每个命令中指定代理,例如:

git --proxy=http://proxy.company.com

因为我在工作中比在家里做的更多git

3 个答案:

答案 0 :(得分:10)

您可以使用

完成所要求的操作
git -c http.proxy= clone https://github.com/foo/bar.git

这会将代理设置为此命令的空值,因此不使用代理。

如果不是克隆,而是关于抓取,推送,拉动等,您还可以向存储库添加两个遥控器,然后相应地设置remote.<name>.proxy。然后你在工作中使用一个遥控器,在家中使用另一个。由于提交是相同的,所以即使它位于不同的远程跟踪分支上,也不必下载提交两次。

答案 1 :(得分:1)

我不确定它是否符合您的需求,但您可以通过这种方式设置特定网址的代理:

[http "<matching url>"]
    proxy = <url>

例如:我在工作中支持代理,并且想要访问github上的项目,所以我将以下部分添加到我的~/.gitconfig(请注意,我在匹配网址中使用假用户名“proxy”):

[http "https://proxy@github.com/"]
    proxy = https://10.144.1.10:8080/

从现在开始,每当我想访问没有代理服务器的任何服务器时 - 我就像往常一样。当我想通过代理访问服务器时,我在前面添加假的“代理”用户名。

当我落后于代理时,这将停滞不前,但另有工作:

$ git clone https://github.com/project/path.git

这将在代理后面工作:

$ git clone https://proxy@github.com/project/path.git

要使fetchpullpush正常工作,您需要添加2个遥控器(一个用于代理,一个不用代理)并相应地使用。

答案 2 :(得分:0)

我通过编写一个Bash脚本解决了类似的情况,该脚本只需通过设置http.proxy配置变量来打开和关闭代理:

#!/bin/sh

proxy="http://host:port"

if [[ $(git config --global http.proxy) ]]; then
    git config --global --unset http.proxy
    echo "Git is not using a proxy"
else
    git config --global http.proxy $proxy
    echo "Git is using the proxy at $proxy"
fi

我调用了脚本flip_git_proxy并将其放入路径中。现在,每次我开始一个新的Bash会话时,我只需运行:

在工作中:

$ flip_git_proxy
Git is using the proxy at http://host:post

在家:

$ flip_git_proxy
Git is not using a proxy