我使用bower list
命令时遇到了问题,这是因为bower使用git://
URL获取远程GitHub仓库列表,但我们公司的防火墙禁止了git://
协议。为了解决这个问题,除了设置环境变量外,我还需要对git进行额外的配置。以下是我需要执行的完整命令列表(记得用你自己的代理主机和端口替换):
export HTTP_PROXY=http://localhost:3128
export HTTPS_PROXY=http://localhost:3128
export http_proxy=http://localhost:3128
export https_proxy=http://localhost:3128
git config --global http.proxy http://localhost:3128
git config --global https.proxy http://localhost:3128
git config --global url."http://".insteadOf git://
Bash中的标准环境变量是大写的,对于代理而言它们是HTTP_PROXY
和HTTPS_PROXY
,但有些工具期望这些变量是小写的,Bower就是其中之一。这就是为什么我喜欢设置两种形式的代理:大小写都有。
Bower使用git从GitHub获取包,因此需要将配置键添加到git中。http.proxy
和https.proxy
是代理设置,应该指向你的代理。最后但并非最不重要的是,你需要告诉git不要使用git://
协议,因为它可能被防火墙拦截。你需要将其替换为标准的http://
协议。有人建议像下面这样使用https://
代替git://
:git config --global url."https://".insteadOf git://
,但我遇到了Connection reset by peer
错误,所以我使用的是http://
,对我而言效果很好。
在家中我不使用任何代理,也没有公司防火墙,因此我更喜欢切换回“正常”的无代理设置。以下是我的做法:
# remove proxy environment variables
unset HTTP_PROXY
unset HTTPS_PROXY
unset http_proxy
unset https_proxy
# remove git configurations
git config --global --unset http.proxy
git config --global --unset https.proxy
git config --global --unset url."http://".insteadOf
我不太擅长记忆事物,所以我永远不会记得所有那些命令。除此之外,我很懒,也不想手动输入那些冗长的命令。这就是为什么我创建了函数来设置和取消代理设置。以下是我在一些别名定义后添加到我的.bashrc
文件中的两个函数:
set_proxy() {
export HTTP_PROXY=http://localhost:3128
export HTTPS_PROXY=http://localhost:3128
export http_proxy=http://localhost:3128
export https_proxy=http://localhost:3128
git config --global http.proxy http://localhost:3128
git config --global https.proxy http://localhost:3128
git config --global url."http://".insteadOf git://
}
unset_proxy() {
unset HTTP_PROXY
unset HTTPS_PROXY
unset http_proxy
unset https_proxy
git config --global --unset http.proxy
git config --global --unset https.proxy
git config --global --unset url."http://".insteadOf
}
现在当我需要设置代理时,我只需执行set_proxy
命令,取消设置则使用unset_proxy
命令。借助Bash的自动完成功能,我甚至不需要手动输入这些命令,只需按Tab键即可让系统自动补全。