通过网络进行git push是如何工作的?(代理)

22
我想知道git push是如何工作的。我在代理后面,即使在我的PhpStorm软件中配置也不起作用。
所以,我想知道它是如何通过网络发送的,我猜测使用80端口进行HTTP和443端口进行HTTPS。
我在SO上读了一堆帖子,但没能找出问题所在。我猜“我的”代理没有启用WebDAV,就像这里解释的那样:无法通过代理推送到GitHub 但我想知道是否还有其他原因导致问题,需要注意的是,除了80、22和443端口外,所有端口都关闭了。
git remote -vv
origin  https://Vadorequest@bitbucket.org/Vadorequest/vadorequest.git (fetch)
origin  https://Vadorequest@bitbucket.org/Vadorequest/vadorequest.git (push)

解决方案:

非安全代理(http)

如果代理不安全,则可以使用以下命令进行配置:

git config --global http.proxy http://user:password@host:port

要禁用它,请使用以下命令:

git config --global --unset-all http.proxy

安全代理(https)

git config --global https.proxy https://user:password@host:port

要禁用它,请使用以下命令:

git config --global --unset-all https.proxy

请注意,如果您正在 Windows 下并使用 TortoiseGit,则可以从软件本身设置代理设置(网络选项卡)。

如果您正在使用 Cygwin,则需要注意,如果您设置了全局配置,则仅为当前环境设置。 (使用 cmd.exe 将其设置为 Windows,但使用 cygwin 控制台将其设置为仅限 cygwin)

因此,如果您通过 IDE(PhpStorm,WebStorm)使用 Git,请确保已在 IDE 使用的环境中设置了配置,否则它将无法正常工作。

还要注意,如果您在 git 设置中设置了代理,并且未处于代理之后,则它也将无法正常工作。 例如:您在工作中设置了代理并且它运行良好,但当您在家中使用它时,它不再工作,尽管以前可以正常工作)


2
Git使用的协议取决于远程配置的方式。您可以使用git remote -vv进行检查。将结果粘贴在此处,以便我们提供更多帮助。 - Antoan Milkov
在主帖中添加。 - Vadorequest
请注意,如果您的密码中包含“@”,则需要编写类似以下内容才能使其正常工作:https://"user:password"@host:port,基本上只需在用户:pwd周围加上引号即可。 - Vadorequest
我不知道为什么在使用以下命令配置HTTP代理git config --global http.proxy http://127.0.0.1:1080后,我的Git仍然超时。你有任何想法吗? - KaiserKatze
4个回答

12
如果您的代理允许无需用户名和密码即可访问,则可以使用:


git config --global https.proxy https://proxy.company.com:8888

如果您的代理需要用户名和密码,则:

git config --global https.proxy https://user:password@proxy.company.com:8888
请确保将8888替换为您真实的代理端口。
请确保将proxy.company.com替换为您真实的代理服务器名称或IP地址。
告诉我这是否有帮助。

1
我会尝试使用 http.proxy,我不相信连接是安全的。如果我没有代理在家里会发生什么?我猜当我不在代理后面但想要确保我的 git 不会出问题时,这个设置不会搞乱它。我很快就会尝试。 - Vadorequest
如果我的密码包含 '@' 符号怎么办? - shakeel

2

上面已经提到了http和https代理:

git config --global http.proxy http://127.0.0.1:8888
git config --global https.proxy http://127.0.0.1:8888

但是SSH代理不同,您应该在~/.ssh/config下添加此内容。对于Windows用户:
Host github.com
   User git
   ProxyCommand connect -S 127.0.0.1:8888 -a none %h %p

对于Linux用户:

ProxyCommand 'nc -X 5 -x localhost:8888 %h %p'

2

如果你在使用一个需要指定领域、用户名和密码的NTLM代理,建议使用CNTLM。你只需要使用代理凭据配置CNTLM,然后在git config命令中使用localhost:3128。


1
为了避免每次针对不同的代码库都需要使用以下命令:
git config --global https.proxy https://proxy.company.com:8888

将环境变量设置如下,并放松:

export https_proxy=https://username:password@proxy_ip:port

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接