2017-01-03 234 views
2

背景如何绕过使用git config设置的http.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婷的工作比我在家里做。

+0

出于这个原因,在我的笔记本我设置开/关由操作系统代理(Ubuntu的GNOME),我还没有配置任何东西在混帐。 – zochamx

+0

我不认为你可以在Windows上做到这一点。 (顺便说一句,你是怎么做的?'HTTP_PROXY'变量?) –

+0

是'http_proxy'&'https_proxy'变量。 – zochamx

回答

4

您可以做什么你使用

git -c http.proxy= clone https://github.com/foo/bar.git 

这将代理设置为这个命令空值,因此不使用代理问道。


如果不是克隆,但约取,推,拉等,还可以增加两个遥控器来你的资料库,然后设置相应remote.<name>.proxy。然后你在工作中使用一台遥控器,在家使用另一台遥控器。由于提交是相同的,即使它位于不同的远程跟踪分支上,您也不必下载提交两次。

+0

'-c'选项是我正在寻找的。而使用不同的遥控器是我没有想到的。还没有尝试过,但谢谢你。 –

+0

提供'http.proxy ='会导致'错误:缺少'http.proxy''的值 –

+0

在哪个Git版本中?它为我工作,显然对于OP来说。 – Vampire

1

我不知道是否会满足您的需求,但你可以设置代理在这种方式的具体网址:

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

例如:我身后的工作代理,并希望在访问项目github上,所以我想补充以下部分我~/.gitconfig(注意,我用假的用户名“代理”匹配网址):

[http "https://[email protected]/"] 
    proxy = https://10.144.1.10:8080/ 

从现在起,每当我想没有代理访问任何服务器 - 我这样做照常。当我想通过代理访问服务器时,我在前面添加了假“代理”用户名。

当我身后代理这将停止,但在其他方面的工作:

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

这背后的代理工作:

$ git clone https://[email protected]/project/path.git 

为了fetchpullpush工作 - 你需要添加2个遥控器(一个代理,一个没有代理)并相应地使用。

+0

是的,这是一个有效的解决方案,但我想我更喜欢'-c'选项。 –

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 
+0

嗯,我想要一种在每个命令期间忽略代理的方式,并且只在命令持续时间内。无论如何,我不明白这个脚本的重点。难道我不是'git config --global --unset http.proxy'?为什么我需要一个脚本?另外,我还需要另一个Windows脚本,而且我不太喜欢cmd,并且我不太了解PowerShell。 –

+0

@JohnRed如果你仅仅在某些命令期间忽略代理,并不重要,因为Git使用网络的唯一时间是在clone,fetch和push期间,所以你不妨设置它在会议开始时。就我个人而言,我发现运行这个简单的脚本比编写设置/取消设置代理的命令快。最后,该脚本可以在Windows上使用Bash。 –

相关问题