我在公司防火墙后面使用 git,并且通过使用 http.proxy --global 配置成功克隆了外部项目。
当我想在内网上通过 http 进行克隆时,我的问题就出现了。我怀疑代理配置干扰了内网请求。
我知道我可以在使用 Intranet 之前重置配置,但这对用户不太友好。
我也看到了这个答案,但它似乎只适用于现有的存储库。
有没有办法只为一个命令调用停用代理使用?在这种情况下,初始克隆?
我在公司防火墙后面使用 git,并且通过使用 http.proxy --global 配置成功克隆了外部项目。
当我想在内网上通过 http 进行克隆时,我的问题就出现了。我怀疑代理配置干扰了内网请求。
我知道我可以在使用 Intranet 之前重置配置,但这对用户不太友好。
我也看到了这个答案,但它似乎只适用于现有的存储库。
有没有办法只为一个命令调用停用代理使用?在这种情况下,初始克隆?
我总是设置:
no_proxy=.mycompany
(export
如果我在 Unix 上,或者set
在 Windows 上很简单)
绕过所有以“”结尾的内网url的代理就足够了.mycompany
。
请参阅示例:
我在自己的项目中使用它.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 别名:
~/.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
将被一堆空的[http]
部分标题污染。没什么大不了的,只是很烦人。
在某些情况下,例如在公司防火墙后面,您需要进行配置~/.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
启用它。您甚至可以通过创建更多别名在多个代理之间切换。
就我而言,我能够通过执行在我的公司设置中禁用通过代理的 git clone 请求
git config --global --add remote.origin.proxy ""
根据 git 文档,这将禁用对名为 origin 的远程仓库的所有请求。