Como converter `git:` urls em `http:` urls


139

Estou trabalhando por trás de um proxy http. Estou tentando clonar a árvore de origem do Android usando a ferramenta "repo".

Essa ferramenta insiste em usar git://URLs, mesmo que os http://URLs também funcionem. Como resultado, não consigo baixar a fonte.

É possível forçar o gituso sempre http?

Edit: meu http_proxy está configurado corretamente. Por exemplo, isso funciona:

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

Mas isso não ocorre (errno = Tempo limite da conexão esgotado):

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

Portanto, essa resposta realmente não me ajuda.


Respostas:


297

Aqui está um exemplo de reescrita do protocolo padrão para o GitHub:

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

Documentação do Git para url.<base>.insteadOf:

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

Qualquer URL que comece com esse valor será reescrita para começar com <base>. Quando mais de uma sequência de caracteres corresponde a um determinado URL, a correspondência mais longa é usada.


19
ajuda quando o firewall bloqueia o protocolo git! :)
Wojtek Turowicz

Posso fazer uma pergunta aqui? Eu estava usando isso, mas escrevi "heeps" em vez de "https". Como posso corrigir isso? Faz 'git config --global.url. github.com/.insteadDe heeps: //github.com/ 'funciona?
Xuxu

1
Dica: git remote -vimediatamente mostra efeito insteadOfe pushInsteadOfconfigurações
Beni Cherniavsky-Paskin

Isso funcionou para mim em WiFi público com porta 22 bloqueada. Como a configuração pode ser revertida para os padrões?
yivo 28/11

14
Essa resposta quase me ajudou, exceto que meu repositório estava usando um git@github.com:...formato para os URLs. Isso funcionou: git config --global url."https://github.com/".insteadOf 'git@github.com:'para mim.
precisa saber é o seguinte

35

Não sei como essa ferramenta de repo usa o Git (e se você pode configurar o 'repo' para usar o protocolo http), mas você pode tentar enganá-lo usando a url.<base>.insteadOfvariável de configuração (consulte as páginas de manual git-config e git-fetch ).

Você já tentou usar o core.gitProxyfirewall, se esse é o problema do uso do protocolo git?


2
Obrigado, essa variável "em vez de" é exatamente o que eu precisava.
#

23

Eu tive esse mesmo problema ao obter submodulos recursivamente em um repositório git. Estou atrás de um firewall maluco que não permite conexões de saída na porta git. Alguns dos submódulos dos submódulos foram codificados como git://github.com/blah/blah.git. Isso matou minha população recursiva de submódulos. A solução alternativa é a seguinte:

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

Isso substitui git://por https://<GITUSERNAME>@todos os URLs do repositório do submódulo. Você precisa substituir <GITUSERNAME>por seu próprio nome de usuário git. Observe também que --globalé necessário; apenas adicionar essa configuração ao diretório do repositório base não funciona.


3
Você não usa apenas o git config --global url. "Https: //" .insteadOf git: // como mostrado aqui? github.com/angular/angular-phonecat/issues/141 Quero dizer, o nome de usuário é obrigatório?
21715

3

Você pode verificar ~/.gitconfigse está substituindo o SSH por https: // ou vice-versa.

Ao utilizar nosso site, você reconhece que leu e compreendeu nossa Política de Cookies e nossa Política de Privacidade.
Licensed under cc by-sa 3.0 with attribution required.