ChatGPT解决这个技术问题 Extra ChatGPT

How to convert `git:` urls to `http:` urls

I'm working behind an http proxy. I'm trying to clone Android's source tree using their "repo" tool.

This tool insists on using git:// URLs, even though http:// URLs also work. As a result, I can't download the source.

Is it possible to force git to always use http?

Edit: my http_proxy is configured correctly. For example, this works:

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

But this doesn't (errno=Connection timed out):

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

So this answer does not really help me.

See this previous answer.

P
Praveen Lobo

Here's an example of rewriting the default protocol for GitHub:

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

The exact values depend on the protocol in use. For example, the above command for git over ssh will look like:

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

Git documentation for url.<base>.insteadOf:

git config [--global] url..insteadOf Any URL that starts with this value will be rewritten to start, instead, with . When more than one insteadOf strings match a given URL, the longest match is used.


helps when firewall blocks git protocol! :)
Can I ask a question here? I was using this but wrote "heeps" rather than "https". How can I correct this? Does 'git config --global.url.github.com/.insteadOf heeps://github.com/' work?
Tip: git remote -v immediately shows effect of insteadOf and pushInsteadOf configs
This worked for me in public WiFi with blocked 22 port. How config can be reverted to defaults?
This answer almost made it for me, except my repository was using a git@github.com:... format for the urls. This worked: git config --global url."https://github.com/".insteadOf 'git@github.com:' for me.
J
Jakub Narębski

I don't know how this repo tool uses Git (and if you can configure 'repo' to use http protocol), but you can try to trick it using url.<base>.insteadOf configuration variable (see git-config and git-fetch manpages).

Have you tried to use core.gitProxy to pass through firewall, if it is the problme with using git protocol?


Thanks, this "insteadOf" variable is exactly what I needed.
V
Vadim Kotov

I had this same problem with recursively getting submodules in a git repository. I'm behind a crazy firewall that doesn't allow outgoing connections on the git port. Some of the submodules of the submodules were coded as git://github.com/blah/blah.git. This killed my recursive population of submodules. The workaround is the following:

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

This replaces git:// with https://<GITUSERNAME>@ in all submodule repository URLs. You need to replace <GITUSERNAME> with your own git username. Also note that the --global is required; just adding this configuration to the base repository directory doesn't work.


Y not just use git config --global url."https://".insteadOf git:// as shown here? github.com/angular/angular-phonecat/issues/141 I mean is the username mandatory?
P
Piper

You can verify in ~/.gitconfig if you're overwriting SSH with https://, or vice versa.


u
user17424855

Find your git account's git config file(.gitconfig), modify the followings:

    [user]
    email = your e-mail account


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


    insteadOf = https://github.com/