代理环境下如何使用 git:// 协议

53

我身处一个防火墙后面,防火墙阻止了9418端口(git)的访问。我想安装一些工具,这些工具要求使用git://github.com/...进行代码检出,因此我不能切换到https来完成检出。

因此,我想知道是否可以通过代理将所有流量重定向到9418端口,如果可以,应该怎么做 :)

4个回答

92

如果你是在谈论 Git 子模块,可以尝试以下方法:

git config --global url.https://github.com/.insteadOf git://github.com/

这种方法不需要设置代理或运行任何脚本。

取自这里


这是一种非常优雅的方法。运行得非常好,没有涉及任何疯狂的代理麻烦。我之前只能更改git:// URI,但在部署中处理bundler让这成为了一个真正的噩梦。你的解决方案神奇地无痛。 - Greg Combs
以下是我在设置了 http.proxy 和 https.proxy 之后,git:// url 仍然无法工作时使用的有效解决方案。 - Chris Matta
2
还适用于ssh:git config --global url.ssh://git@github.com/.insteadOf git://github.com/ - Lol4t0
在公司代理后,git://anongit.gentoo.org/ URL非常好用。现在我可以使用layman来进行叠加! - Mr. Tao
1
编辑答案以添加另一种可能性 - Github现在开始使用git@github.com:而不是git://github.com/作为SSH URL的开头,因此您可能需要更改命令的结尾为 git@ github.com: - LightCC

22

1
嗯,有趣。是否提问者愿意评论这是否有效,以及是否存在任何不利因素? - ijw
我也对这个信息很感兴趣,就像我之前说的,我自己从未尝试过 :-) - Alexander Gladysh
1
请考虑将此脚本的内容复制粘贴,以防文件被删除。 - Filip Hazubski

5
您需要将core.gitProxy设置为代理命令,以便通过SOCKS代理将git连接到远程服务器。您可以创建一个包含以下内容的脚本作为代理命令:
nc -x <your_proxy_host>:<your_proxy_port> $1 $2

两个参数分别表示远程主机和端口,将由git传递到代理命令中。如果您将此脚本命名为 git-proxy 并使其可以从您的 $PATH 中访问,您可以调用 git config 来设置它:

git config --global --add core.gitProxy git-proxy

4

您尝试过使用基于ssh的TCP隧道吗?如果您有一个(a)位于防火墙外部且(b)允许IP转发的ssh服务器,则可以执行以下操作:

ssh -L localhost:9418:<remote>:9418 me@remote-ssh-server

如果你必须在443端口上运行sshd以绕过防火墙,

ssh -P 443 -L localhost:9418:<remote-host>:9418 me@remote-ssh-server

然后,在本地:
git checkout git://localhost/...

显然这不是透明的,而且有点复杂 - 毫无疑问,有更专门针对该问题的工具。 但是,我通常使用此方法,因为它使用我手头上的工具(ssh和我租用的便宜虚拟服务器)。

(实际上,我从未尝试过使用git连接,但我认为它应该可以正常工作。我已经在许多其他单TCP端口协议中使用它而没有问题。)


是的,我可以在特定的存储库上正常工作,但是某些我无法控制的东西正在尝试执行 git clone git://github.com/...,因此我无法像那样使用代理,因为我无法将URL更改为 localhost - user578895
你可以尝试在/etc/hosts中将github.com临时配置为127.0.0.1。 - Alexander Gladysh

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