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.

noamtm
fonte
Veja esta resposta anterior .
John Paulett

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.

Tobu
fonte
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 [email protected]:...formato para os URLs. Isso funcionou: git config --global url."https://github.com/".insteadOf '[email protected]:'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?

Jakub Narębski
fonte
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.

castelo
fonte
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.

Piperchester
fonte