我如何从Git仓库通过HTTP代理?
注意:虽然所描述的用例是关于在一个项目中使用子模块的,但这同样适用于基于HTTP的存储库的正常git clone
。
我有一个在Git控制下的项目。 我想添加一个子模块:
git submodule add http://github.com/jscruggs/metric_fu.git vendor/plugins/metric_fu
但是我明白了
... got 1b0313f016d98e556396c91d08127c59722762d0 got 4c42d44a9221209293e5f3eb7e662a1571b09421 got b0d6414e3ca5c2fb4b95b7712c7edbf7d2becac7 error: Unable to find abc07fcf79aebed56497e3894c6c3c06046f913a under http://github.com/jscruggs/metri... Cannot obtain needed commit abc07fcf79aebed56497e3894c6c3c06046f913a while processing commit ee576543b3a0820cc966cc10cc41e6ffb3415658. fatal: Fetch failed. Clone of 'http://github.com/jscruggs/metric_fu.git' into submodule path 'vendor/plugins/metric_fu'
我有我的HTTP_PROXY设置:
c:\project> echo %HTTP_PROXY% http://proxy.mycompany:80
我甚至有一个全局的Git设置为http代理:
c:\project> git config --get http.proxy http://proxy.mycompany:80
有没有人得到HTTP提取一贯通过代理工作? 真奇怪的是,GitHub上的一些项目工作正常(例如awesome_nested_set
),但其他项目却一直失败(例如rails )。
您还可以设置Git在全局配置属性http.proxy
使用的HTTP代理:
git config --global http.proxy http://proxy.mycompany:80
已经有一些很好的答案了。 不过,我认为我会打入一些代理服务器要求您使用用户名和密码进行身份验证。 有时候这可能在一个域上。
所以,例如,如果你的代理服务器配置如下:
Server: myproxyserver Port: 8080 Username: mydomain\myusername Password: mypassword
然后,使用以下命令添加到.gitconfig
文件中:
git config --global http.proxy http://mydomain\\myusername:mypassword@myproxyserver:8080
不要担心https
。 只要指定的代理服务器支持http和https,那么配置文件中的一个条目就足够了。
然后,您可以通过执行cat .gitconfig
来验证该命令是否已成功将条目添加到.gitconfig
文件中:
在文件末尾,您将看到一个条目,如下所示:
[http] proxy = http://mydomain\\myusername:mypassword@myproxyserver:8080
而已!
最后的工作是设置http_proxy
环境变量。 我已经正确地设置了HTTP_PROXY
,但git显然更喜欢小写的版本。
它看起来像你在Windows上使用Git的Ging编译(或可能是另一个我没有听说过)。 有一些方法可以调试:我相信所有的http代理都是通过curl来完成的。 在运行git之前设置这个环境变量:
GIT_CURL_VERBOSE=1
这至少应该让你知道幕后发生了什么。
当您的网络团队通过重写证书进行ssl-inspection,然后使用一个http url而不是一个https,结合设置这个var为我工作。
git config --global http.proxy http://proxy:8081
你也可以编辑位于Windows系统的%userprofile%目录下的.gitconfig文件 ( notepad%userprofile%.gitconfig )或Linux系统上的〜目录( vi〜/ .gitconfig ),并添加一个http部分 。
.gitconfig文件的内容:
[http] proxy = http://proxy.mycompany:80
这是一个古老的问题,但如果你在Windows上,也可以考虑设置HTTPS_PROXY,如果你通过https URL检索。 为我工作!
如果您只想在指定的存储库上使用代理,则不需要其他存储库。 当你git clone
一个仓库时-c, --config <key=value>
最好的方法是-c, --config <key=value>
选项。 例如
$ git clone https://chromium.googlesource.com/chromium/tools/depot_tools.git --config "http.proxy=proxyHost:proxyPort"
我发现既没有http.proxy
也没有GIT_PROXY_COMMAND
为我的身份验证的http代理工作。 代理不会以任何方式触发。 但是我找到了解决这个问题的方法。
- 安装开瓶器 ,或其他你想要的选择。
-
创建一个authfile。
authfile
的格式是:user_name:password
,user_name
,password
是访问您的代理的用户名和密码。 要创建这样的文件,只需像这样运行命令:echo "username:password" > ~/.ssh/authfile
。 -
编辑
~/.ssh/config
,并确保它的权限是644
:chmod 644 ~/.ssh/config
以github.com为例,在~/.ssh/config
加入以下几行:
Host github.com HostName github.com ProxyCommand /usr/local/bin/corkscrew <your.proxy> <proxy port> %h %p <path/to/authfile> User git
现在,只要你用git@github.com
做任何事情,它就会自动使用代理。 您也可以轻松地对Bitbucket做同样的事情。
这不像其他方法那样优雅,但它的作品像一个魅力。
在Windows上,如果您不希望将纯文本中的密码放在.gitconfig中,则可以使用
- Cntml( http://cntlm.sourceforge.net/ )
它会针对正常甚至Windows NTLM代理进行身份验证,并且无需身份验证就启动localhost-proxy。
为了得到它运行:
- 安装Cntml
- 根据文档配置Cntml来传递您的代理身份验证
-
将git指向新的本地主机代理:
[http] proxy = http://localhost:3128 # change port as necessary
对我来说,它的工作原理是:
sudo apt-get install socat
用你的$ BIN_PATH / gitproxy创建一个文件:
#!/bin/sh _proxy=192.168.192.1 _proxyport=3128 exec socat STDIO PROXY:$_proxy:$1:$2,proxyport=$_proxyport
不要忘记给它执行权限
chmod a+x gitproxy
运行以下命令来设置环境:
export PATH=$BIN_PATH:$PATH git config --global core.gitproxy gitproxy
因为这是Google的第一个结果,所以我发现这个博客文章通过更新curl证书解决了我的问题。
http://www.simplicidade.org/notes/archives/2011/06/github_ssl_ca_errors.html
对我来说,git://只是不能通过代理工作,虽然https://是。 这引起了一些头痛,因为我正在运行所有使用git://的脚本,所以我不能轻易改变它们。 不过,我找到了这个创业板
git config --global url."https://github.com/".insteadOf git://github.com/
设置代理git
命令
git config --global http.proxy http://user:password@domain:port
例
git config --global http.proxy http://clairton:123456@proxy.clairtonluz.com.br:8080
我遇到了同样的问题,修复方法略有不同: 重新构建Git with HTTP SUPPORT
git:
协议不能通过我的公司防火墙。
例如,这个超时:
git clone git://github.com/miksago/node-websocket-server.git
curl github.com
工作得很好,但是,所以我知道我的http_proxy
环境变量是正确的。
我尝试使用http
,就像下面,但有一个直接的错误。
git clone http://github.com/miksago/node-websocket-server.git ->>> fatal: Unable to find remote helper for 'http' <<<-
我尝试像这样重新编译git:
./configure --with-curl --with-expat
但仍然有致命的错误。
最后,经过几个令人沮丧的时间,我读了配置文件,看到这个:
#定义CURLDIR = / foo / bar,如果你的curl头文件和库文件在
#/ foo / bar / include和/ foo / bar / lib目录。
我记得那时候,我没有从源代码编译curl
,所以去找头文件。 果然,他们没有安装。 这是问题所在。 Make没有抱怨丢失的头文件。 所以我没有意识到--with-curl
选项什么也没做(事实上,在我的git
版本中是默认的)。
我做了以下来解决它:
-
添加了make所需的头文件:
yum install curl-devel (expat-devel-1.95.8-8.3.el5_5.3.i386 was already installed).
-
从
/usr/local
删除git
(因为我希望新的安装在那里)。我只是从
/usr/local/share
和/usr/local/libexec
删除了git*
-
搜索包含
curl
和expat
头文件的include dirs,然后(因为我已经通过configure
进行了读取)将它们添加到环境中,如下所示:export CURLDIR=/usr/include export EXPATDIR=/usr/include
-
Ran用下面的选项进行
configure
,同样在configure
文件本身中描述了这些选项,同样也是默认值,但是这是什么东西:./configure --with-curl --with-expat
-
现在
http
通过我的企业防火墙与git
协同工作:git clone http://github.com/miksago/node-websocket-server.git Cloning into 'node-websocket-server'... * Couldn't find host github.com in the .netrc file, using defaults * About to connect() to proxy proxy.entp.attws.com port 8080 * Trying 135.214.40.30... * connected ...
这工作给我。
git config --global http.proxy proxy_user:proxy_passwd@proxy_ip:proxy_port
这不是你的代理问题。 这是github(或git)的问题。 在linux上git-1.6.0.1也不行。 已经报告错误 (不少于你)。
确保删除你的馅饼,他们已经在谷歌。 编辑:一定是在做梦,我想你不能删除它们。 用Gist代替?
$ http_proxy用于http://github.com …. $ https_proxy用于https://github.com …
对于Windows
转到 – > C:/用户/用户名/ gitconfig
用下面的细节更新gitconfig文件
[HTTP]
[HTTPS]
proxy = https://your_proxy:your_port
[HTTP]
proxy = http://your_proxy:your_port
如何检查您的代理和端口号?
Internet Explorer – >设置 – > Internet选项 – >连接 – > LAN设置
您可以使用:
git config --add http.proxy http://user:password@proxy_host:proxy_port
使用代理链
proxychains git pull ...
更新:代理链已停用,请改用proxychains-ng 。
我使用https解决了代理…有些代理甚至不检查https。
Microsoft Windows [Version 6.1.7601] Copyright (c) 2009 Microsoft Corporation. All rights reserved. c:\git\meantest>git clone http://github.com/linnovate/mean.git Cloning into 'mean'... fatal: unable to access 'http://github.com/linnovate/mean.git/': Failed connect to github.com:80; No error c:\git\meantest>git clone https://github.com/linnovate/mean.git Cloning into 'mean'... remote: Reusing existing pack: 2587, done. remote: Counting objects: 27, done. remote: Compressing objects: 100% (24/24), done. rRemote: Total 2614 (delta 3), reused 4 (delta 0)eceiving objects: 98% (2562/26 Receiving objects: 100% (2614/2614), 1.76 MiB | 305.00 KiB/s, done. Resolving deltas: 100% (1166/1166), done. Checking connectivity... done
上面的答案为我工作时,我的代理不需要身份验证。 如果您使用的代理需要您进行身份验证,那么您可以尝试CCProxy。 我有一个关于如何在这里设置它的小教程,
http://blog.praveenkumar.co.in/2012/09/proxy-free-windows-xp78-and-mobiles.html
我能够推,拉,创造新的回购。 一切正常。 确保你做一个干净的卸载,并重新安装新版本,如果你面临与我一样的Git问题。
由于这是很多人的回答,但这只是Winodws用户身后的代理与身份验证。
重新安装(首先失败,不要删除)。
Goto -> **Windows** 1. msysgit\installer-tmp\etc\gitconfig Under [http] proxy = http://user:pass@url:port **Linux** 1. msysgit\installer-tmp\setup-msysgit.sh export HTTP_PROXY="http://USER:PASS@proxy.abc.com:8080"
如果你有任何特殊的字符在用户/传递使用url_encode
正如@ user2188765已经指出的,尝试用http[s]://
替换版本库的git://
协议。 另请参阅此答案