背景
我有的工作电脑,我偶尔会在家里随身携带。现在,我们有了一个代理服务器,我已经将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
比在家做的要多。
发布于 2017-01-03 01:37:10
您可以完全按照您的要求使用
git -c http.proxy= clone https://github.com/foo/bar.git
这将将代理设置为此命令的空值,因此不使用代理。
如果不是克隆,而是抓取、推送、拉等等,那么还可以向存储库添加两个遥控器,然后相应地设置remote.<name>.proxy
。然后你在工作时用一个遥控器,在家用另一个遥控器。由于提交是相同的,所以即使提交在不同的远程跟踪分支上,也不必下载两次。
发布于 2017-01-03 01:51:10
我不确定它是否适合您的需要,但您可以这样设置特定urls的代理:
[http "<matching url>"]
proxy = <url>
例如:我在工作中支持代理,并希望访问github上的项目,因此我在~/.gitconfig
中添加了以下部分(注意,我在匹配url时使用了假用户名" 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个远程处理程序(一个用于代理,一个没有代理)并相应地使用。
发布于 2017-01-03 01:51:26
我通过编写一个简单地通过设置http.proxy
配置变量来打开和关闭代理的Bash脚本来解决类似的情况:
#!/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
https://stackoverflow.com/questions/41439747
复制