如何让 Git 使用代理服务器?
我需要从 Git 服务器检查代码,但每次都显示“请求超时”。我该如何解决这个问题?
或者,如何设置代理服务器?
使用命令:
git config --global http.proxy http://proxyuser:proxypwd@proxy.server.com:8080
将 proxyuser 更改为您的代理用户
将 proxypwd 更改为您的代理密码
将 proxy.server.com 更改为您的代理服务器的 URL
将 8080 更改为代理服务器上配置的代理端口
请注意,这适用于 http 和 https 存储库。
如果您决定随时重置此代理并在没有代理的情况下工作:
使用命令:
git config --global --unset http.proxy
最后,检查当前设置的代理:
git config --global --get http.proxy
这对我有用,在企业防火墙后面的 Windows XP 中。
除了来自 http://code.google.com/p/msysgit/downloads/list?can=3 的 git v1.771 之外,我不必安装任何本地代理或任何其他软件
$ git config --global http.proxy http://proxyuser:proxypwd@proxy.server.com:8080
$ git config --system http.sslcainfo /bin/curl-ca-bundle.crt
$ git remote add origin https://mygithubuser:mygithubpwd@github.com/repoUser/repoName.git
$ git push origin master
proxyuser = 我的 IT 部门分配的代理用户,在我的情况下,它是我用来登录我的 PC 的同一个 windows 用户,Active Directory 用户
proxypwd= 我的代理用户的密码
proxy.server.com:8080 = 代理名称和端口,我从“控制面板”、“Internet 选项”、“连接”、“局域网设置”按钮、“代理服务器”部分内的“高级”按钮获取,使用第一行 (http) 上的服务器名称和端口.
mygithubuser = 我用来登录 github.com 的用户
mygithubpwd = 我的 github.com 用户的密码
repoUser = repo 的用户所有者
repoName = 存储库的名称
git config --global http.sslcainfo MY_NEW_CERTS_BUNDLE.crt
加上 simplicidade.org/notes/archives/2011/06/… 中所述下载的证书(感谢:stackoverflow.com/a/7206627/98528)为我完成了!
git://
协议克隆存储库时,git 仍然不起作用。
设置一个名为 http_proxy
的系统变量,其值为 ProxyServer:Port
。这是最简单的解决方案。分别使用 https_proxy
作为评论中指出的 daefu。
设置 gitproxy (正如 sleske 提到的)是另一种选择,但这需要一个“命令”,这不像上述解决方案那么简单。
参考文献:http://bardofschool.blogspot.com/2008/11/use-git-behind-proxy.html
http_proxy
,HTTPS URL 需要 https_proxy
。或者,可以只为所有 URL 设置 all_proxy
。请参阅 curl(1) 中的 ENVIRONMENT
部分。但是,在设置 git-config 选项时,http.proxy
用于 HTTP 和 HTTPS URL。请参阅 git-config(1) 中的 http.proxy
。
如果配置代理服务器的命令行方式不起作用,您可能只需编辑 .gitconfig (在您的配置文件的根目录中,它可能隐藏在 C:\Documents and Settings 和某些网络驱动器中)并添加它:
[http]
proxy = http://username:password@proxy.at.your.org:8080
不过,YMMV 仅涵盖命令行配置的第一步。您可能还必须编辑系统 git 配置,我不知道他们把它藏在哪里。
作为使用 git config --global http.proxy address:port
的替代方法,您可以在命令行上设置代理:
git -c "http.proxy=address:port" clone https://...
优点是代理不是持久设置的。在 Bash 下,您可以设置别名:
alias git-proxy='git -c "http.proxy=address:port"'
如果您使用的是 ubuntu,请执行以下操作...
第 1 步:安装开瓶器
$ sudo apt-get install corkscrew
第 2 步:编写一个名为 git-proxy.sh 的脚本并添加以下内容
#!/bin/sh
exec corkscrew <name of proxy server> <port> $*
# <name_of_proxy_server> and <port> are the ip address and port of the server
# e.g. exec corkscrew 192.168.0.1 808 $*
第 3 步:使脚本可执行
$ chmod +x git-proxy.sh
第 4 步:通过设置环境变量为 GIT 设置代理命令
$ export GIT_PROXY_COMMAND="/<path>/git-proxy.sh"
现在使用 git 命令,例如
git clone git://git.kernel.org/pub/scm/linux/kernel/git/torvalds/linux.git
"$@"
而不是 $*
。有关更多详细信息,请参阅您的 shell 手册。
我注意到并想在这里分享一些东西:
git config --global http.proxy http://<proxy address>:<port number>
上述方法不适用于 SSH URL(即 git@github.com:<user name>/<project name>.git
):
git clone git@github.com:<user name>/<project name>.git // will not use the http proxy
如果我们在 HTTPS 端口 (https://help.github.com/en/articles/using-ssh-over-the-https-port) 上设置 SSH,情况不会改变,因为它只会更改 SSH 连接所连接的端口(默认为 22)。
由于 windows 中存在多个 .gitconfig
文件,因此面临同样的问题,请按照以下步骤修复:
第 1 步:打开 Git BASH
第 2 步: 查找 .gitconfig
,执行以下命令:
git config --list --global --show-origin
第 3 步: 复制 .gitconfig
中的以下内容:
[http]
proxy = http://YOUR_PROXY_USERNAME:YOUR_PROXY_PASSWORD@YOUR.PROXY.SERVER:YOUR.PROXY.SERVER.PORT
sslverify = false
[https]
proxy = http://YOUR_PROXY_USERNAME:YOUR_PROXY_PASSWORD@YOUR.PROXY.SERVER:YOUR.PROXY.SERVER.PORT
sslverify = false
[url "http://github.com/"]
insteadOf = git://github.com/
[user]
name = Arpit Aggarwal
email = aggarwalarpit.89@gmail.com
尝试将以下内容放入 ~/.gitconfig 文件:
[http]
proxy = http://proxy:8080
[https]
proxy = http://proxy:8080
[url "https://"]
insteadOf = git://
对于 git 协议(git://...),安装 socat 并编写如下脚本:
#!/bin/sh
exec socat - socks4:your.company.com:$1:$2
使其可执行,将其放在您的路径中,并在您的 ~/.gitconfig
中将 core.gitproxy
设置为该脚本的名称。
socat STDIO PROXY:%proxy%:%1:%2,proxyport=%PROXYPORT%
set GIT_PROXY_COMMAND=path\to\script
让 GIT 使用代理而不弄乱 git config。
我在工作中使用 Windows XP(州/政府),所以我进行了研究,发现了这个 here,它对我有用。希望这会有所帮助:)
http_proxy 环境变量
如果您使用代理服务器或防火墙,您可能需要设置 http_proxy 环境变量才能从命令行访问某些 url。示例:为 perl 安装 ppm 或在 linux 中应用 rpm,更新 ubuntu
使用代理服务器的主机名或 IP 地址设置 http_proxy 变量:http_proxy=http:// [proxy.example.org]
如果代理服务器需要用户名和密码,请将它们包含在以下格式中:http_proxy=http:// [username:password@proxy.example.org]
如果代理服务器使用 80 以外的端口,请包括端口号:http_proxy=http:// [username:password@proxy.example.org:8080]
视窗
打开控制面板并单击系统图标。在高级选项卡上,单击环境变量。在系统变量面板中单击新建。使用适当的代理信息添加 http_proxy(参见上面的示例)。
Linux、Solaris 或 HP-UX
使用特定于您的shell 的命令(例如set 或export)设置http_proxy 环境变量。要使此更改持久化,请将命令添加到 shell 的相应配置文件中。例如,在 bash 中,在 .bash_profile 或 .bashrc 文件中添加如下一行:
http_proxy=http:// [用户名:密码@主机名:端口];导出 $http_proxy
除了这些答案之外,我发现考虑以下两点很有帮助:
可能需要执行一种身份验证方案:
[http]
# https://github.com/git/git/blob/master/Documentation/config.txt
proxyAuthMethod = anyauth|basic|digest|negotiate|ntlm
此外,通常使用 NTLM 身份验证架构,可能需要明确提供 AD 域。
在 git bash 中:
echo %userdomain%
并相应地更新 http.proxy:
git config --global http.proxy http://DOMAIN\\proxyuser:proxypwd@proxy.server.com:8080
无论如何,添加 CURL 日志可能有助于调查:
export GIT_CURL_VERBOSE=1
git config --global http.proxyAuthMethod basic
添加 proxyAuthMethod。在我设置此配置参数之前,Git gersion 2.8.3 没有发送任何身份验证。
如果您安装并配置了 tsocks 或 proxychains,您可以
$ tsocks git clone <you_repository>
或者
$ proxychains git clone <you_repository>
为了使它更短,我为 proxychains
创建了一个符号链接 /usr/bin/p
,所以我可以像这样使用它
p git clone <you_repository>
我可以用它来代理任何命令,
p <cmd-need-be-proxied>
顺便说一句,proxychains 很久没有更新了,你可以试试proxychians-ng
在终端上设置 git 代理
如果
您不希望手动为每个 git 项目设置代理,一个接一个
总是想为所有项目使用相同的代理
全局设置一次
git config --global http.proxy username:password@proxy_url:proxy_port
git config --global https.proxy username:password@proxy_url:proxy_port
如果您只想为一个 git 项目设置代理(在某些情况下,您可能不想为某些 git 连接使用相同的代理或任何代理)
//go to project root
cd /bla_bla/project_root
//set proxy for both http and https
git config http.proxy username:password@proxy_url:proxy_port
git config https.proxy username:password@proxy_url:proxy_port
如果要显示当前代理设置
git config --list
如果要全局删除代理
git config --global --unset http.proxy
git config --global --unset https.proxy
如果您只想删除一个 git root 的代理
//go to project root
cd /bla-bla/project_root
git config --unset http.proxy
git config --unset https.proxy
这是代理设置
git config --global http.proxy http://<username>:<pass>@<ip>:<port>
git config --global https.proxy http://<username>:<pass>@<ip>:<port>
我遵循了这里推荐的大部分答案。首先,我收到以下错误:
致命:无法访问“https://github.com/folder/sample.git/”:schannel:下一个 InitializeSecurityContext 失败:未知错误(0x80092012)-吊销功能无法检查证书的吊销。
然后我尝试了@Salim Hamidi 的以下命令
git config --global http.proxy http://proxyuser:proxypwd@proxy.server.com:8080
但我收到以下错误:
致命:无法访问“https://github.com/folder/sample.git/”:CONNECT 后从代理收到 HTTP 代码 407
如果代理服务器无法验证 SSL 证书,则可能会发生这种情况。所以我们要确保关闭 ssl 验证(不推荐用于不受信任的站点),所以我已经完成了 @Arpit 推荐的以下步骤,但有细微的变化:
1.首先确保删除任何以前的代理设置:
git config --global --unset http.proxy
2.然后列出并获取gitconfig内容
git config --list --show-origin
3.最后更新gitconfig文件内容如下:
[http]
sslCAInfo = C:/yourfolder/AppData/Local/Programs/Git/mingw64/ssl/certs/ca-bundle.crt
sslBackend = schannel
proxy = http://proxyuser:proxypwd@proxy.server.com:8080
sslverify = false
[https]
proxy = http://proxyuser:proxypwd@proxy.server.com:8080
sslverify = false
我已经尝试了上述所有答案,但没有任何效果,因为存在代理密码编码问题。
该命令有效:
git config --global http.proxy http://username@proxy.example.com:PortNumber
不要在命令中输入密码。当您尝试连接到任何 git repo 时,它将动态询问。
对于 Windows 用户:如果 git config
或 set http_proxy=
不起作用,this answer 可能会有所帮助:
将 git 存储库的 git://
协议替换为 http://
。请注意,无论如何,您必须先设置 http_proxy
。
在不知疲倦地尝试了此页面上的每个解决方案之后,我的解决方法是改用 SSH 密钥!
打开 Git Bash $ ssh-keygen.exe -t rsa -C 打开你的 Git 提供者(Github、Bitbucket 等) 添加复制 id_rsa.pub 文件内容到 Git 提供者的输入页面(检查你的个人资料)
使用代理的另一种方法是使用 SSH 在 git configs 中,在 ssh 地址上配置源远程。然后使用 ssh-keygen 命令,它会为您提供可以在 GitLab 或 Gitab 帐户设置中设置的公钥登录相应完成...
1-通过在您的 Git 客户端中运行 git remote -v
来验证正在使用哪些遥控器。
2-如果这是 http(s) url,将其更改为 ssh 地址,例如运行:git remote set-url <remote name, e.g. origin> <new SSH URL>
git remote set-url git@gitlab.com:example/myproject.git
3-生成用于登录的 ssh 密钥,运行:ssh-keygen -o
,此命令生成公钥(id_rsa.pub 文件)和私钥。
4拷贝公钥内容。 (来自 id_rsa.pub 文件)
5-转到 gitlab/githup/.... 配置文件部分 > setting/ssh-key 。创建新的 ssh 密钥并粘贴公钥内容
%40
作为用户名/密码字符串中的@
的替代品,尽管我自己没有对此进行测试。希望能帮助到你。 :-)