背景
我的工作电脑,我偶尔会在家里随身携带。现在,我们有一个代理服务器正在运行,我已通过执行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
。
答案 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
要使fetch
,pull
和push
正常工作,您需要添加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