如何暂时禁用 git http 代理

Posted

技术标签:

【中文标题】如何暂时禁用 git http 代理【英文标题】:How to temporarily disable git http proxy 【发布时间】:2013-10-31 16:18:33 【问题描述】:

我在公司防火墙后面使用 git,并且通过使用 http.proxy --global 配置成功克隆了外部项目。

当我想在内网上通过http克隆时出现了我的问题。我怀疑代理配置干扰了内网请求。

我知道我可以在使用 Intranet 之前重置配置,但这对用户不太友好。

我也看到了这个answer,但它似乎只适用于现有的存储库。

有没有办法只为一个命令调用停用代理使用?在这种情况下,初始克隆?

【问题讨论】:

【参考方案1】:

在我的例子中,我能够通过执行在我的公司设置中禁用通过代理的 git clone 请求

git config --global --add remote.origin.proxy ""

根据 git 文档,这会禁用对名为 origin 的远程仓库的所有请求。

【讨论】:

【参考方案2】:

我喜欢做的是设置两个 Git 别名:

~/.gitconfig

[alias]
        noproxy = config --global --remove-section http
        proxy = config --global http.proxy http://127.0.0.1:9666

请注意,我没有使用config --global --unset http.proxy 重置代理,因为这会留下[http] 部分标题,因此在反复启用和禁用代理后,您的.gitconfig 将被一堆空的@987654325 污染@ 部分标题。没什么大不了的,只是很烦人。


在某些情况下,例如在公司防火墙后面,您需要改为配置 ~/.ssh/config。设置变得稍微复杂一些:

~/.gitconfig

[alias]
        noproxy = !sh -c 'cp ~/.ssh/config.noproxy ~/.ssh/config'
        proxy = !sh -c 'cp ~/.ssh/config.proxy ~/.ssh/config'

~/.ssh/config.noproxy

Host github.com-username
  HostName github.com
  User git
  IdentityFile ~/.ssh/id_rsa

~/.ssh/config.proxy

Host *
  ProxyCommand connect -H 127.0.0.1:9666 %h %p

Host github.com-username
  HostName github.com
  User git
  IdentityFile ~/.ssh/id_rsa

您甚至可以通过将别名更改为以下方式来组合这两种方法:

[alias]
        noproxy = !sh -c 'git config --global --remove-section http 2> /dev/null && cp ~/.ssh/config.noproxy ~/.ssh/config'
        proxy = !sh -c 'git config --global http.proxy http://127.0.0.1:9666 && cp ~/.ssh/config.proxy ~/.ssh/config'

现在我可以简单地输入git noproxy 来禁用代理,并输入git proxy 来启用它。您甚至可以通过创建更多别名在多个代理之间切换。

【讨论】:

【参考方案3】:

我总是设置:

no_proxy=.mycompany

export 如果我在 Unix 上,或者简单的 set 在 Windows 上)

对所有以“.mycompany”结尾的内网url绕过代理就足够了。

参见示例:

“Can't update/install using composer behind a corporate firewall” “Only use a proxy for certain git urls/domains?” “Cannot do git-svn fetch behind proxy”

我在自己的项目中使用它:.proxy.example:

export http_proxy=http://username:userpassword@server.company:port
export https_proxy=http://username:userpassword@server.company:port
export no_proxy=.company localhost

【讨论】:

我希望我能多次投票!我花了几天时间试图弄清楚这该死的东西!谢谢你!

以上是关于如何暂时禁用 git http 代理的主要内容,如果未能解决你的问题,请参考以下文章

如何暂时禁用滚动?

如何判断屏幕保护程序是不是暂时禁用?

如何暂时禁用 d3.js 中的缩放

如何使用 Python 暂时禁用键盘输入

如何使用 JavaScript 暂时禁用文本选择?

如何暂时禁用我的 iPhone 应用程序安排的所有本地通知?