Wie ziehe ich über einen HTTP-Proxy aus einem Git-Repository?


491

Hinweis: Während es sich bei dem beschriebenen Anwendungsfall um die Verwendung von Submodulen innerhalb eines Projekts handelt, gilt dies auch für ein normales git cloneRepository über HTTP.

Ich habe ein Projekt unter Git-Kontrolle. Ich möchte ein Submodul hinzufügen:

git submodule add http://github.com/jscruggs/metric_fu.git vendor/plugins/metric_fu

Aber ich verstehe

...
got 1b0313f016d98e556396c91d08127c59722762d0
got 4c42d44a9221209293e5f3eb7e662a1571b09421
got b0d6414e3ca5c2fb4b95b7712c7edbf7d2becac7
error: Unable to find abc07fcf79aebed56497e3894c6c3c06046f913a under http://github.com/jscruggs/metri...
Cannot obtain needed commit abc07fcf79aebed56497e3894c6c3c06046f913a
while processing commit ee576543b3a0820cc966cc10cc41e6ffb3415658.
fatal: Fetch failed.
Clone of 'http://github.com/jscruggs/metric_fu.git' into submodule path 'vendor/plugins/metric_fu'

Ich habe mein HTTP_PROXY eingerichtet:

c:\project> echo %HTTP_PROXY%
http://proxy.mycompany:80

Ich habe sogar eine globale Git-Einstellung für den http-Proxy:

c:\project> git config --get http.proxy
http://proxy.mycompany:80

Hat jemand HTTP-Abrufe erhalten, um konsistent über einen Proxy zu arbeiten? Was wirklich seltsam ist, ist, dass einige Projekte auf GitHub gut funktionieren ( awesome_nested_setzum Beispiel), andere jedoch durchweg fehlschlagen ( zum Beispiel Schienen ).


Könnte Ihr Proxy einige Wörter oder etwas zensieren und dadurch nur die Repos beeinflussen, bei denen diese Wörter zufällig als Teil des Byte-Streams angezeigt werden?
pjz


4
@alvaro, ich denke du meinst, dass es ein mögliches Duplikat dieser Frage ist , Git mit einem Proxyserver zum Laufen zu bringen . Diese Frage ist älter als die, auf die Sie sich beziehen.
Derek Mahar

2
@James, Ihre "globale" Git-Einstellung für den Proxyserver ist nicht global, sondern lokal. Um global, müssen Sie Argument liefern --globalzu git config.
Derek Mahar

1
@DerekMahar Ältere Fragen können aus Duplikaten neuerer Fragen geschlossen werden, wenn die neuere Frage von besserer Qualität ist (oder allgemeiner anwendbar ist).
Raedwald

Antworten:


584

Sie können auch den HTTP-Proxy festlegen, den Git in der globalen Konfigurationseigenschaft verwendet http.proxy:

git config --global http.proxy http://proxy.mycompany:80

So authentifizieren Sie sich beim Proxy:

git config --global http.proxy http://mydomain\\myusername:mypassword@myproxyserver:8080/

( Das Authentifizierungsformat geht an @EugeneKulabuhov und @JaimeReynoso .)


8
Dies funktionierte für mich: Setzen Sie HTTP_PROXY in der Umgebung für Benutzer (unter Windows) und dann den obigen Kommentar mit $ HTTP_PROXY (Großbuchstaben). +1 für diese Lösung.
Sean Aitken

4
CleverCoder, unter Windows müssen Sie% HTTP_PROXY% und nicht $ HTTP_PROXY angeben (es sei denn, Sie führen Cygwin aus). Ich werde meine Antwort so bearbeiten, dass sie unter Windows anstelle einer Unix-Umgebung funktioniert.
Derek Mahar

7
Wo lege ich den Benutzernamen und das Passwort für den Proxy ab?
Duna

26
Verwenden Sie die git config --global http.proxy http://mydomain\\myusername:mypassword@myproxyserver:8080Syntax, um Benutzername / Passwort
anzugeben

2
Für alle, die Probleme mit dem Proxy haben könnten, http: // <UserID>: <Password> @ <ProxyURL>: <Port> / arbeitete für mich
Jaime Reynoso

146

Darauf gibt es bereits einige gute Antworten. Ich dachte jedoch, ich würde mich einschalten, da einige Proxyserver die Authentifizierung mit einer Benutzer-ID und einem Kennwort erfordern. Manchmal kann dies auf einer Domain sein.

Beispiel: Wenn Ihre Proxyserverkonfiguration wie folgt lautet:

Server: myproxyserver
Port: 8080
Username: mydomain\myusername
Password: mypassword

Fügen Sie dann .gitconfigmit dem folgenden Befehl zu Ihrer Datei hinzu:

git config --global http.proxy http://mydomain\\myusername:mypassword@myproxyserver:8080

Mach dir keine Sorgen https. Solange der angegebene Proxyserver http und https unterstützt, reicht ein Eintrag in der Konfigurationsdatei aus.

Sie können dann überprüfen, ob der Befehl den Eintrag .gitconfigerfolgreich zu Ihrer Datei hinzugefügt hat, indem Sie Folgendes tun cat .gitconfig:

Am Ende der Datei sehen Sie einen Eintrag wie folgt:

[http]
    proxy = http://mydomain\\myusername:mypassword@myproxyserver:8080

Das ist es!


Interessant. Ich bin in der Lage, mit 100% zum Teil "Deltas auflösen" zu gelangen, aber dann sieht es so aus, als ob der Klonprozess nur hängt. Hat das jemand erlebt?
Roman

1
+1. Und bald können Sie Proxy pro URL einrichten!
VonC

@apoplexy können Sie Ihre vorgeschlagene Änderung bitte kommentieren, damit ich überlegen kann
Max MacLeod

3
Wenn Ihr Benutzername oder Passwort ein @ -Symbol enthält, können Sie %40es per URL codieren, und es funktioniert.
Adarsha

3
Anstelle von cat .gitconfig können Sie die Konfigurationseinstellungen mit git config --list
user3969377

125

Was schließlich funktionierte, war das Festlegen der http_proxyUmgebungsvariablen. Ich hatte HTTP_PROXYrichtig eingestellt, aber Git mag anscheinend die Kleinbuchstabenversion besser.


3
Funktioniert die Einstellung http.proxyin der globalen Git-Konfiguration? In Ihrer Frage legen Sie http.proxyin der lokalen Repository-Konfiguration fest.
Derek Mahar

22
In meinem Fall musste ich denhttps_proxy
M Smith

1
https.proxyschien für mich zu funktionieren, als ich https über Github benutzte
Shervin Asgari

3
@MSmith Wenn Sie dies einstellen mussten, https_proxybedeutet dies, dass Sie httpsnicht verwendet haben, um httpwelche Frage es sich handelt.
Piotr Dobrogost

3
Curl und libcurl erkennen HTTP_PROXY und HTTPS_PROXY in Großbuchstaben nicht. Siehe diesen Link für weitere Informationen: curl.haxx.se/mail/archive-2001-12/0034.html
Doug

49

Es sieht so aus, als würden Sie eine MingW-Kompilierung von Git unter Windows verwenden (oder möglicherweise eine andere, von der ich noch nichts gehört habe). Es gibt Möglichkeiten, dies zu debuggen: Ich glaube, dass die gesamte http-Proxy-Arbeit für Git von Curl ausgeführt wird. Legen Sie diese Umgebungsvariable fest, bevor Sie git ausführen:

GIT_CURL_VERBOSE=1

Dies sollte Ihnen zumindest eine Vorstellung davon geben, was sich hinter den Kulissen abspielt.


7
Wenn ich diese Umgebungsvariable hinzufüge, druckt msysgit nichts extra aus. :(
Andrew Arnott

Nachdem ich einige Zeit mit Proxys gekämpft hatte, half mir dieser Tipp herauszufinden, dass die Zertifikatsdatenbank von curl fehlte / durcheinander war, und DAS war der Grund, warum Anfragen fehlschlugen.
Davenpcj

Ich habe schon seit einiger Zeit danach gesucht. Vielen Dank.
M Smith

40

Wenn Sie nur Proxy für ein angegebenes Repository verwenden möchten, benötigen Sie dies nicht für andere Repositorys. Der bevorzugte Weg ist die -c, --config <key=value>Option, wenn Sie git cloneein Repository. z.B

$ git clone https://chromium.googlesource.com/chromium/tools/depot_tools.git --config "http.proxy=proxyHost:proxyPort"

Das ist seltsam, ich habe versucht, $ http_proxy zu setzen, aber git hat es nicht respektiert. Sieht so aus, als würde es sich nur um seine eigene Konfiguration
kümmern

Funktioniert. Sie können auch --configmehrmals angeben , z. B. wann Sie auch festlegen möchten https.proxy.
Barfuin

Vielen Dank! Genau das, wonach ich gesucht habe
Boyang

2
Klonen Sie mit der Proxy-Konfiguration, ohne jedoch die Proxy-Konfiguration des Benutzers zu ändern. Genau das, was ich brauche! Danke.
Untergang

26

Wenn Ihr Netzwerkteam eine SSL-Überprüfung durch Umschreiben von Zertifikaten durchführt, funktioniert die Verwendung einer http-URL anstelle einer https-URL in Kombination mit der Einstellung dieser Variable für mich.

git config --global http.proxy http://proxy:8081

2
Sie können dies auch zur Umgebung hinzufügen, um die umgeschriebenen Zertifikate zu akzeptieren, die die Netzwerk-Typen anbieten, um Ihren Datenverkehr zu überprüfen: export GIT_SSL_NO_VERIFY = true
bbaassssiiee

Hat perfekt für mich funktioniert. Vielen Dank. Ich musste nur git config --global http.proxy Proxy hinzufügen : 8081 git config --global https.proxy Proxy: 8081
Sid

einfache und schnelle Lösung, +1 für diese Antwort.
Walker

1
Danke an @sethbc, @datasmid! Ich brauchte GIT_CURL_VERBOSE = 1 zum Debuggen und GIT_SSL_NO_VERIFY = true, um die Überprüfung zu überspringen.
Henry Rivera

Ich arbeite nicht mit mir. nicht einmal mit dem GIT_SSL_NO_VERIFY var
keinabel

20

Sie können auch die .gitconfig-Datei bearbeiten, die sich im Verzeichnis% userprofile% auf dem Windows-System ( Editor% userprofile% .gitconfig ) oder im Verzeichnis ~ auf dem Linux-System ( vi ~ / .gitconfig ) befindet, und einen http-Abschnitt wie unten hinzufügen .

Inhalt der .gitconfig-Datei:

[http]
        proxy = http://proxy.mycompany:80

20

Für mich funktioniert git: // einfach nicht über den Proxy, obwohl https: // dies tut. Dies verursachte einige Kopfschmerzen, da ich Skripte ausführte, die alle git: // verwendeten, sodass ich sie nicht einfach alle ändern konnte. Allerdings habe ich dieses Juwel gefunden

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

Vielen Dank, das hat sehr geholfen
Grat

Ich weiß, dass ich auch Probleme hatte, von git: // zu ziehen. Haben Sie ein SSH-Schlüsselproblem in Betracht gezogen? Mein Problem war auf eine schlechte SSH-Schlüsselkonfiguration zurückzuführen.
Avazula

17

Dies ist eine alte Frage, aber wenn Sie unter Windows arbeiten, sollten Sie auch HTTPS_PROXY festlegen, wenn Sie über eine https-URL abrufen. Hat für mich gearbeitet!


2
https_proxyIn meinem Fall (msysgit unter Windows XP) war es ausreichend, die Umgebungsvariable allein festzulegen (kein git globaler oder Repo-Proxy-Optionssatz).
Piotr Dobrogost

13

Ich finde http.proxyund GIT_PROXY_COMMANDarbeite nicht für meinen authentifizierten http-Proxy. Der Proxy wird in keiner Weise ausgelöst. Aber ich finde einen Weg, dies zu umgehen.

  1. Installieren Sie einen Korkenzieher oder andere gewünschte Alternativen.
  2. Erstellen Sie eine Authfile. Das Format authfileist: user_name:passwordund user_name, passwordist Ihr Benutzername und Passwort Ihres Proxy zuzugreifen. Um eine solche Datei zu erstellen, führen Sie einfach den folgenden Befehl aus : echo "username:password" > ~/.ssh/authfile.

  3. Bearbeiten Sie ~/.ssh/configund stellen Sie sicher, dass die Berechtigung lautet 644:chmod 644 ~/.ssh/config

Nehmen Sie als Beispiel github.com und fügen Sie die folgenden Zeilen hinzu ~/.ssh/config:

Host    github.com
        HostName        github.com
        ProxyCommand    /usr/local/bin/corkscrew <your.proxy> <proxy port> %h %p <path/to/authfile>
        User            git

Wenn Sie jetzt etwas tun git@github.com, wird der Proxy automatisch verwendet. Sie können das Gleiche auch mit Bitbucket tun .

Dies ist nicht so elegant wie andere Ansätze, aber es funktioniert wie ein Zauber.


1
Können Sie bitte Schritt 2 "Erstellen einer Authfile" näher erläutern? Es scheint, dass Ihr Ansatz der einzige ist, der für git: // urls funktioniert.
Nik

@ NikBagdon Ich habe Schritt 2 weitere Details hinzugefügt. Lassen Sie mich wissen, wenn etwas unklar ist :)
Carlosin

11

Wenn Sie unter Windows Ihr Kennwort nicht im Klartext in .gitconfig eingeben möchten, können Sie es verwenden

Es authentifiziert Sie gegen einen normalen oder sogar Windows NTLM-Proxy und startet den localhost-Proxy ohne Authentifizierung.

Um es zum Laufen zu bringen:

  • Installieren Sie Cntml
  • Konfigurieren Sie Cntml gemäß der Dokumentation, um Ihre Proxy-Authentifizierung zu bestehen
  • Zeigen Sie mit git auf Ihren neuen localhost-Proxy:

    [http]
        proxy = http://localhost:3128       # change port as necessary
    

2
Für das, was es wert ist, sollte dies die akzeptierte Antwort gewesen sein, er ist auf Windows. Es gibt keinen transparenten Proxy (sonst würde es kein Problem geben.
Booyaa

9

Für mich hat es funktioniert:

sudo apt-get install socat

Erstellen Sie eine Datei in Ihrem $ BIN_PATH / gitproxy mit:

#!/bin/sh 
_proxy=192.168.192.1 
_proxyport=3128 
exec socat STDIO PROXY:$_proxy:$1:$2,proxyport=$_proxyport

Vergessen Sie nicht, ihm Ausführungsberechtigungen zu erteilen

chmod a+x gitproxy

Führen Sie die folgenden Befehle aus, um die Umgebung einzurichten:

export PATH=$BIN_PATH:$PATH
git config --global core.gitproxy gitproxy

1
Link zu einer Erklärung und ein Link zu einem Kern mit Aktualisierungen des (Mini-) Skripts: emilsit.net/blog/archives/…
Karl Richter

Diese Antwort ist die einzige, die für git://Protokoll-URLs für (seltene) Git-Server funktioniert, die https nicht unterstützen. Funktioniert auch unter Windows mit einer geeigneten Batchdatei und einem Socat für Windows.
Davenpcj

8

Proxy auf Git einrichten

Befehl

git config --global http.proxy http://user:password@domain:port

Beispiel

git config --global http.proxy http://clairton:123456@proxy.clairtonluz.com.br:8080

7

Setzen Sie Git credential.helper auf wincred.

git config --global credential.helper wincred

Stellen Sie sicher, dass nur 1 Berechtigungsnachweis vorhanden ist

git config -l

Wenn es mehr als 1 gibt und es nicht auf wincred eingestellt ist, entfernen Sie es.

git config --system --unset credential.helper

Stellen Sie nun den Proxy ohne Passwort ein.

git config --global http.proxy http://<YOUR WIN LOGIN NAME>@proxy:80

Überprüfen Sie, ob alle von Ihnen hinzugefügten Einstellungen gut aussehen.

git config --global -l

Jetzt kannst du loslegen!


6

Ich hatte das gleiche Problem mit einer etwas anderen Lösung: REBUILDING GIT MIT HTTP SUPPORT

Das git:Protokoll funktionierte nicht über meine Unternehmensfirewall.

Dies ist beispielsweise eine Zeitüberschreitung:

git clone git://github.com/miksago/node-websocket-server.git

curl github.comfunktioniert http_proxyjedoch einwandfrei , sodass ich weiß, dass meine Umgebungsvariable korrekt ist.

Ich habe versucht http, wie unten zu verwenden, habe aber sofort einen Fehler erhalten.

git clone http://github.com/miksago/node-websocket-server.git

->>>  fatal: Unable to find remote helper for 'http' <<<-

Ich habe versucht, Git wie folgt neu zu kompilieren:

./configure  --with-curl --with-expat

habe aber trotzdem den fatalen fehler bekommen.

Nach einigen frustrierenden Stunden las ich schließlich die Konfigurationsdatei und sah Folgendes:

# Definieren Sie CURLDIR = / foo / bar, wenn sich Ihr Curl-Header und Ihre Bibliotheksdateien befinden

Verzeichnisse # / foo / bar / include und / foo / bar / lib.

Ich erinnerte mich damals, dass ich mich nicht curlan die Quelle gehalten hatte, und suchte nach den Header-Dateien. Sicher genug, sie wurden nicht installiert. Das war das Problem. Make hat sich nicht über die fehlenden Header-Dateien beschwert. Ich habe also nicht bemerkt, dass die --with-curlOption nichts bewirkt hat (es ist tatsächlich die Standardeinstellung in meiner Version vongit ).

Ich habe Folgendes getan, um das Problem zu beheben:

  1. Die für make benötigten Header wurden hinzugefügt:

    yum install curl-devel
    (expat-devel-1.95.8-8.3.el5_5.3.i386  was already installed).
    
  2. Entfernt gitvon /usr/local(da ich möchte, dass die neue Installation dort lebt).

    Ich habe einfach git*von /usr/local/shareund entfernt/usr/local/libexec

  3. Es wurde nach den Include-Verzeichnissen gesucht, die die Dateien curlund die expatHeader-Dateien enthalten, und diese dann (weil ich sie durchgelesen hatte) wie folgt configurezur Umgebung hinzugefügt:

    export CURLDIR=/usr/include 
    export EXPATDIR=/usr/include
    
  4. Lief configuremit den folgenden Optionen, die wiederum in der configureDatei selbst beschrieben wurden, und waren auch die Standardeinstellungen, aber was solls:

    ./configure  --with-curl --with-expat
    
  5. Und jetzt httpfunktioniert gitüber meine Unternehmens-Firewall:

    git clone http://github.com/miksago/node-websocket-server.git
    Cloning into 'node-websocket-server'...
    * Couldn't find host github.com in the .netrc file, using defaults
    * About to connect() to proxy proxy.entp.attws.com port 8080
    *   Trying 135.214.40.30... * connected
    ...
    

Ich wäre froh, dass Sie dies vorgebracht haben. Ich wusste nicht, dass das Git-Protokoll auf meinem Squid-Proxy
rupert160


5

Das hat bei mir funktioniert.

git config --global http.proxy proxy_user:proxy_passwd@proxy_ip:proxy_port

3

Sie können verwenden:

git config --add http.proxy http://user:password@proxy_host:proxy_port


2

Für Windows

Gehe zu -> C: / Benutzer / Benutzername / gitconfig

Aktualisieren Sie die gitconfig-Datei mit den folgenden Details

[http]

[https]

proxy = https://your_proxy:your_port

[http]

proxy = http://your_proxy:your_port

Wie überprüfe ich meine Proxy- und Portnummer?

Internet Explorer -> Einstellungen -> Internetoptionen -> Verbindungen -> LAN-Einstellungen


2

Die folgende Methode funktioniert bei mir:

echo 'export http_proxy=http://username:password@roxy_host:port/' >> ~/.bash_profile
echo 'export https_proxy=http://username:password@roxy_host:port' >> ~/.bash_profile
  • Zsh-Hinweis: Ändern Sie Ihre ~ / .zshenv-Datei anstelle von ~ / .bash_profile.
  • Ubuntu und Fedora Hinweis: Ändern Sie Ihre ~ / .bashrc-Datei anstelle von ~ / .bash_profile.

2

Erwähnenswert: Die meisten Beispiele im Internet zeigen Beispiele wie

git config --global http.proxy proxy_user:proxy_passwd@proxy_ip:proxy_port

Es scheint also, dass Sie - wenn Ihr Proxy eine Authentifizierung benötigt - müssen Ihr Unternehmen-Passwort in der Git-config verlassen. Welches ist nicht wirklich cool.

Wenn Sie den Benutzer jedoch nur ohne Kennwort konfigurieren:

git config --global http.proxy proxy_user@proxy_ip:proxy_port

Git scheint (zumindest auf meinem Windows-Computer ohne Anmeldeinformations-Helfer) dies zu erkennen und fordert beim Repo-Zugriff zur Eingabe des Proxy-Passworts auf.


Sie sind mein Mann, da mein sso-Firmenbenutzername und mein Passwort so viele spezielle Symbole haben, dass es ziemlich unmöglich war, sie zu verschlüsseln und durchzukommen. Mit dieser "Escamotage" konnte ich das Passwort auf der Klonfläche oder andere nächste Schritte angeben, nachdem ich die Proxy-Adresse festgelegt hatte.
Carmine Tambascia

1

Dies ist kein Problem mit Ihrem Proxy. Es ist ein Problem mit Github (oder Git). Es schlägt für mich unter git-1.6.0.1 auch unter Linux fehl. Fehler bereits gemeldet (von Ihnen nicht weniger).

Stellen Sie sicher, dass Sie Ihre Pasteten löschen, sie sind bereits auf Google. Edit: Muss geträumt haben, ich denke du kannst sie nicht löschen. Verwenden Sie stattdessen Gist ?


Ich habe auch auf github und msysGit gepostet. Ich war mir nicht sicher, wo das Problem lag. Ich kann Pasteten leider nicht löschen.
James A. Rosen


1

Die obigen Antworten haben bei mir funktioniert, wenn mein Proxy keine Authentifizierung benötigt. Wenn Sie einen Proxy verwenden, für den Sie sich authentifizieren müssen, können Sie CCProxy ausprobieren. Ich habe ein kleines Tutorial, wie man es hier einrichtet.

http://blog.praveenkumar.co.in/2012/09/proxy-free-windows-xp78-and-mobiles.html

Ich konnte schieben, ziehen, neue Repos erstellen. Alles hat gut funktioniert. Stellen Sie sicher, dass Sie eine neue Deinstallation und Neuinstallation der neuen Version durchführen, wenn Sie Probleme mit Git haben, wie ich es getan habe.


1

Versuchen Sie, wie @ user2188765 bereits betont hat, das git://Protokoll des Repositorys durch zu ersetzen http[s]://. Siehe auch diese Antwort


0

Ich bin mit https um den Proxy herumgekommen ... einige Proxys überprüfen nicht einmal https.

Microsoft Windows [Version 6.1.7601]
Copyright (c) 2009 Microsoft Corporation.  All rights reserved.

c:\git\meantest>git clone http://github.com/linnovate/mean.git
Cloning into 'mean'...
fatal: unable to access 'http://github.com/linnovate/mean.git/': Failed connect
to github.com:80; No error

c:\git\meantest>git clone https://github.com/linnovate/mean.git
Cloning into 'mean'...
remote: Reusing existing pack: 2587, done.
remote: Counting objects: 27, done.
remote: Compressing objects: 100% (24/24), done.
rRemote: Total 2614 (delta 3), reused 4 (delta 0)eceiving objects:  98% (2562/26

Receiving objects: 100% (2614/2614), 1.76 MiB | 305.00 KiB/s, done.
Resolving deltas: 100% (1166/1166), done.
Checking connectivity... done

0

Da dies von vielen beantwortet wurde, ist dies jedoch nur für Winodws USER, der mit auth hinter dem Proxy steht.

Neuinstallation (zuerst fehlgeschlagen, nicht entfernen).

Goto ->
**Windows**
1. msysgit\installer-tmp\etc\gitconfig
    Under [http]
        proxy = http://user:pass@url:port

**Linux**
1. msysgit\installer-tmp\setup-msysgit.sh
      export HTTP_PROXY="http://USER:PASS@proxy.abc.com:8080"

Wenn Sie ein spezielles Zeichen in user / pass haben, verwenden Sie url_encode

Durch die Nutzung unserer Website bestätigen Sie, dass Sie unsere Cookie-Richtlinie und Datenschutzrichtlinie gelesen und verstanden haben.
Licensed under cc by-sa 3.0 with attribution required.