Come convertire `git:` urls in `http:` urls


139

Sto lavorando dietro un proxy http. Sto cercando di clonare l'albero dei sorgenti di Android usando il loro strumento "repo".

Questo strumento insiste sull'uso degli git://URL, anche se http://funzionano anche gli URL. Di conseguenza, non riesco a scaricare la fonte.

È possibile forzare gitl'uso sempre http?

Modifica: il mio http_proxy è configurato correttamente. Ad esempio, funziona:

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

Ma questo non funziona (errno = Timeout della connessione):

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

Quindi questa risposta non mi aiuta davvero.


Risposte:


297

Ecco un esempio di riscrittura del protocollo predefinito per GitHub:

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

Documentazione Git per url.<base>.insteadOf:

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

Qualsiasi URL che inizia con questo valore verrà riscritto per iniziare invece con <base> . Quando più di una invece di stringhe corrispondono a un determinato URL, viene utilizzata la corrispondenza più lunga.


19
aiuta quando il firewall blocca il protocollo git! :)
Wojtek Turowicz,

Posso fare una domanda qui? Lo stavo usando ma ho scritto "heeps" anziché "https". Come posso correggere questo? Fa 'git config --global.url. github.com/.insteadDegli eeps: //github.com/ 'lavoro?
Xuxu,

1
Suggerimento: git remote -vmostra subito effetto insteadOfe pushInsteadOfconfigurazioni
Beni Cherniavsky-Paskin

Questo ha funzionato per me nel WiFi pubblico con 22 porte bloccate. In che modo è possibile ripristinare le impostazioni predefinite?
yivo,

14
Questa risposta è quasi arrivata a me, tranne per il fatto che il mio repository utilizzava un git@github.com:...formato per gli URL. Questo ha funzionato: git config --global url."https://github.com/".insteadOf 'git@github.com:'per me.
Kraenhansen,

35

Non so come questo strumento di repository utilizzi Git (e se è possibile configurare 'repo' per usare il protocollo http), ma puoi provare a ingannarlo usando la url.<base>.insteadOfvariabile di configurazione (vedi manpage git-config e git-fetch ).

Hai provato a usare core.gitProxyper passare attraverso il firewall, se è il problema con l'utilizzo del protocollo git?


2
Grazie, questa variabile "Invece di" è esattamente ciò di cui avevo bisogno.
noamtm,

23

Ho avuto lo stesso problema con ottenere ricorsivamente i sottomoduli in un repository git. Sono dietro un firewall pazzo che non consente connessioni in uscita sulla porta git. Alcuni dei sottomoduli dei sottomoduli sono stati codificati come git://github.com/blah/blah.git. Questo ha ucciso la mia popolazione ricorsiva di sottomoduli. La soluzione è la seguente:

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

Questo sostituisce git://con https://<GITUSERNAME>@tutti gli URL del repository del sottomodulo. Devi sostituire <GITUSERNAME>con il tuo nome utente git. Si noti inoltre che --globalè richiesto; semplicemente l'aggiunta di questa configurazione alla directory del repository di base non funziona.


3
Non solo usi git config --global url. "Https: //" .insteadOf git: // come mostrato qui? github.com/angular/angular-phonecat/issues/141 Voglio dire, il nome utente è obbligatorio?
Αλέκος,

3

Puoi verificare ~/.gitconfigse stai sovrascrivendo SSH con https: // o viceversa.

Utilizzando il nostro sito, riconosci di aver letto e compreso le nostre Informativa sui cookie e Informativa sulla privacy.
Licensed under cc by-sa 3.0 with attribution required.