如何将`git:`网址转换为`http:`网址

173

我正在一个http代理后面工作。我正在尝试使用Android的“repo”工具克隆源代码树。

这个工具坚持使用git:// URL,即使http:// URL也可以工作。因此,我无法下载源代码。

是否有可能强制git始终使用http

编辑:我的http_proxy已正确配置。例如,这个工作:

git clone http://android.git.kernel.org/platform/manifest.git

但这个错误信息并没有说明问题的原因(errno=连接超时):

git clone git://android.git.kernel.org/platform/manifest.git

所以这个答案对我并没有真正的帮助。

5个回答

354

下面是一个重写GitHub默认协议的示例:

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

具体的值取决于所使用的协议。例如,对于通过ssh使用git的上述命令将如下所示:

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

Git文档中关于url.<base>.insteadOf的说明:

git config [--global] url.<base>.insteadOf <other_url>

任何以此值开头的URL都将被重写为以<base>开头。当有多个insteadOf字符串与给定URL匹配时,使用最长的匹配。


23
防火墙阻挡 Git 协议时,可以提供帮助! :) - Wojtek Turowicz
3
提示:git remote -v命令可以立即显示insteadOfpushInsteadOf配置的效果。 - Beni Cherniavsky-Paskin
这在被22端口封锁的公共WiFi中对我有效。如何将配置恢复到默认设置? - yivo
15
除了我的代码库使用 git@github.com:... 格式的 URL 之外,这个答案对我几乎有帮助。尝试以下命令:git config --global url."https://github.com/".insteadOf 'git@github.com:'。该命令适用于我。 - kraenhansen
谢谢!确切的解决方案,对我有用。我遇到了这个错误:“C:\ Program Files \ Git \ cmd \ git.EXE ls-remote -h -t git://github.com/shahata/jsdelivr-cdn-data.git” - MANJEET
显示剩余3条评论

35
我不知道这个仓库工具如何使用Git(以及是否可以配置'repo'以使用http协议),但您可以尝试使用url.<base>.insteadOf配置变量来欺骗它(请参见git-configgit-fetch手册)。
如果使用git协议存在问题,您是否尝试使用core.gitProxy通过防火墙进行通信?

2
谢谢,这个“insteadOf”变量正是我所需要的。 - noamtm

27

我在一个 Git 仓库中递归获取子模块时也遇到了同样的问题。由于我身处的防火墙不允许对 Git 端口进行出站连接,一些子模块的子模块被编码为 git://github.com/blah/blah.git。这导致我的子模块递归填充失败。解决方法如下:

git config --global url."https://<GITUSERNAME>@".insteadOf git://

这个命令将在所有子模块存储库的URL中将 git:// 替换为 https://<GITUSERNAME>@。 您需要用自己的git用户名替换 <GITUSERNAME>。 还要注意,--global 是必需的; 只将此配置添加到基本存储库目录不起作用。


3
为什么不像这里所示那样使用git config --global url."https://".insteadOf git://?我的意思是,用户名是否必需的?参考链接:https://github.com/angular/angular-phonecat/issues/141 - agelbess

4

如果您正在使用SSH或HTTPS,您可以在~/.gitconfig中进行验证。


0

找到你的git账户的git配置文件(.gitconfig),修改以下内容:

    [user]
    email = your e-mail account


    name = your git account
    [url "git@github.com:"]


    insteadOf = https://github.com/

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