ChatGPT解决这个技术问题 Extra ChatGPT

让 Git 与代理服务器一起工作 - 因“请求超时”而失败

如何让 Git 使用代理服务器?

我需要从 Git 服务器检查代码,但每次都显示“请求超时”。我该如何解决这个问题?

或者,如何设置代理服务器?

这不会是一个 git 客户端配置项吗?似乎涉及 cmd.exe 的唯一方面是 git 客户端可能允许您在环境变量中指定代理。
我已经编辑了原始问题以删除所有 Windows 引用,因为这个问题本身就是特定于 git 的。
请注意,您将能够setup a proxy per git repo url!
这个问题中的大多数答案都与 HTTP 代理有关。如果您有 SOCKS 代理,请参阅 this question 了解 HTTP/S protocolsthis one 了解 git:// 协议。

J
Johan

使用命令:

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

谢谢萨利姆。我的工作在 URL 中没有 proxyuser:proxypwd 。
多谢你们。对我来说,这是基于 NTLM 的身份验证,只是更新我的 .gitconfig 不起作用:(。所以我必须获得使用 NTLM 身份验证的 CNTLM。我所要做的就是将我的 CNTLM 指向我的网络代理服务器,然后将我的软件指向将管理器(如 yum、apt-get 或 ssh)更新到本地代理。在 git 操作如克隆的情况下,拉取 http.proxy 是我在本地服务器上配置的本地代理。
你好,如果它有“@”字符,我该如何设置proxypass?我知道我必须摆脱这个角色,但我不知道如何......谢谢
@patricK 您可以使用 %40 作为用户名/密码字符串中的 @ 的替代品,尽管我自己没有对此进行测试。希望能帮助到你。 :-)
@patricK 我可以确认使用 %40 作为 @ 的替代品。似乎如果特殊字符不起作用,您应该尝试对其进行 URL 编码。可在此处找到编码:w3schools.com/tags/ref_urlencode.asp
a
alvaro

这对我有用,在企业防火墙后面的 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 仍然不起作用。
根据对我有用的内容,对 pablolic 的信息进行了一些澄清: 1)如果 proxyuser 是 Windows 登录名,则省略 AD 域,只包含不带域的用户名; 2) proxypwd 中的空格应编码为“+”。例如,“我的密码”应输入为“我的+密码”。
@EdmundYeung99:我建议用 %40 替换 @ 符号。没有尝试过,但我相信这是标准的 URL 编码。
@demongolem:我怀疑您可能需要对您的密码进行 URL 编码(没有尝试过,这只是一个有根据的猜测)。请参阅以下答案中表中的 UrlEncoded 列:stackoverflow.com/a/11236038/216440 在您的情况下,这意味着将 $ 替换为 %24。
J
Jens Wirth

设置一个名为 http_proxy 的系统变量,其值为 ProxyServer:Port。这是最简单的解决方案。分别使用 https_proxy 作为评论中指出的 daefu。

设置 gitproxy (正如 sleske 提到的)是另一种选择,但这需要一个“命令”,这不像上述解决方案那么简单。

参考文献:http://bardofschool.blogspot.com/2008/11/use-git-behind-proxy.html


或者,如果您要连接到 https 存储库,请使用“https_proxy”。
@daefu:不确定是否需要设置 https_proxy。我已连接到 https 存储库并按照 pablolic 说明的第一步(即将 http.proxy 添加到 git 配置文件)。这就是我所需要的。
我需要 https_proxy。仅设置 http_proxy 不允许它克隆 HTTPS 存储库
@daefu +1 这也适用于寡妇 github - 相关问题:stackoverflow.com/questions/16216176/…
@SimonTewsi @explunit 在设置环境变量时,HTTP URL 需要 http_proxy,HTTPS URL 需要 https_proxy。或者,可以只为所有 URL 设置 all_proxy。请参阅 curl(1) 中的 ENVIRONMENT 部分。但是,在设置 git-config 选项时,http.proxy 用于 HTTP 和 HTTPS URL。请参阅 git-config(1) 中的 http.proxy
g
guerda

如果配置代理服务器的命令行方式不起作用,您可能只需编辑 .gitconfig (在您的配置文件的根目录中,它可能隐藏在 C:\Documents and Settings 和某些网络驱动器中)并添加它:

[http]
    proxy = http://username:password@proxy.at.your.org:8080

不过,YMMV 仅涵盖命令行配置的第一步。您可能还必须编辑系统 git 配置,我不知道他们把它藏在哪里。


“您可能也必须编辑系统 git 配置”。不,通常不会。系统和用户配置相结合;在两者之一中设置代理应该就足够了。
在我的情况下,它位于我的 Windows 机器上 [git home]\etc\gitconfig - 编辑后它就像一个魅力!
如果命令行由于特殊字符而不喜欢您的密码,这将特别有用。
S
Steve Pitchers

作为使用 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"'

S
Sk Hasanujjaman

如果您使用的是 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 手册。
E
Elly

我注意到并想在这里分享一些东西:

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)。


A
Arpit Aggarwal

由于 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

a
augustocbx

尝试将以下内容放入 ~/.gitconfig 文件:

[http]
    proxy = http://proxy:8080
[https]
    proxy = http://proxy:8080
[url "https://"]
    insteadOf = git://

我尝试了上面所有的东西。直到我添加了此处列出的 https 条目,我才能够工作。
a
ashutosh

对于 git 协议(git://...),安装 socat 并编写如下脚本:

#!/bin/sh

exec socat - socks4:your.company.com:$1:$2

使其可执行,将其放在您的路径中,并在您的 ~/.gitconfig 中将 core.gitproxy 设置为该脚本的名称。


也适用于带有 cygwin 的 SOCAT 的 Windows。使用 socat STDIO PROXY:%proxy%:%1:%2,proxyport=%PROXYPORT%
可以使用 set GIT_PROXY_COMMAND=path\to\script 让 GIT 使用代理而不弄乱 git config。
是的!终于有正确提示了!我还需要身份验证: exec socat STDIO PROXY:<proxy>:$1:$2,proxyport=<port>,proxyauth=<user>:<passwd>在这里找到:gist.github.com/sit/49288
S
Shak Daniel

我在工作中使用 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


tanx--> :) C:\Users\AT>echo %https_proxy% 172.20.4.55:808
b
blacelle

除了这些答案之外,我发现考虑以下两点很有帮助:

可能需要执行一种身份验证方案:

[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 没有发送任何身份验证。
f
fangxing

如果您安装并配置了 tsocksproxychains,您可以

$ 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


A
Add080bbA

在终端上设置 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

https.proxy 是无效配置🙃。仅存在名为 http.proxy 的配置项。见:git-scm.com/docs/git-config/2.9.5#Documentation/…
h
hannad rehman

这是代理设置

git config --global http.proxy http://<username>:<pass>@<ip>:<port>
git config --global https.proxy http://<username>:<pass>@<ip>:<port>

W
Wael Almadhoun

我遵循了这里推荐的大部分答案。首先,我收到以下错误:

致命:无法访问“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

I
Ishtdeep Hora

我已经尝试了上述所有答案,但没有任何效果,因为存在代理密码编码问题。

该命令有效:

git config --global http.proxy http://username@proxy.example.com:PortNumber 

不要在命令中输入密码。当您尝试连接到任何 git repo 时,它将动态询问。


谢谢,这对我有用。虽然 git config 设置应该是 http.proxy
用户名是不够的。还需要密码。
使用此代码 {git config --global http.proxy proxyuser:proxypwd@proxy.server.com:8080}
C
Community

对于 Windows 用户:如果 git configset http_proxy= 不起作用,this answer 可能会有所帮助:

将 git 存储库的 git:// 协议替换为 http://。请注意,无论如何,您必须先设置 http_proxy


J
Janac Meena

在不知疲倦地尝试了此页面上的每个解决方案之后,我的解决方法是改用 SSH 密钥!

打开 Git Bash $ ssh-keygen.exe -t rsa -C 打开你的 Git 提供者(Github、Bitbucket 等) 添加复制 id_rsa.pub 文件内容到 Git 提供者的输入页面(检查你的个人资料)


f
fatemeh sadeghi

使用代理的另一种方法是使用 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 密钥并粘贴公钥内容