如何将“ git:”urls 转换为“ http:”urls

我在一个 http 代理后面工作,我试图用他们的“回购”工具克隆 Android 的源代码树。

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

是否可以强制 git始终使用 http

编辑: 正确配置了我的 http _ agent:

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

但是这不会(errno = 连接超时) :

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

所以 这个答案对我没什么帮助。

121303 次浏览

我不知道这个 回购工具如何使用 Git (如果你能配置“ repo”使用 http 协议) ,但是你可以尝试使用 url.<base>.insteadOf配置变量欺骗它(参见 Git-config去捡东西手册)。

如果使用 git 协议有问题,您是否尝试过使用 core.gitProxy通过防火墙?

在递归地获取 git 存储库中的子模块时,我遇到了同样的问题。我被一个疯狂的防火墙挡住了它不允许 Git 端口上的外部连接。子模块的一些子模块被编码为 git://github.com/blah/blah.git。这扼杀了我的子模块递归种群。解决办法如下:

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

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

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

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

确切的值取决于所使用的协议。例如,上面针对 git over ssh 的命令如下:

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

url.<base>.insteadOf的 Git 文档:

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

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

如果使用 https://覆盖 SSH,可以在 ~/.gitconfig中进行验证,反之亦然。

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

    [user]
email = your e-mail account




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




insteadOf = https://github.com/