Git mit einem Proxyserver zum Laufen bringen - schlägt mit "Zeitüberschreitung bei Anforderung" fehl.


918

Wie bringe ich Git dazu, einen Proxyserver zu verwenden?

Ich muss Code von einem Git-Server auschecken, aber jedes Mal wird "Zeitüberschreitung bei Anforderung" angezeigt. Wie komme ich darum herum?

Wie kann ich alternativ einen Proxyserver einrichten?


Wäre dies nicht ein Git-Client-Konfigurationselement? Der einzige Aspekt, der cmd.exe zu betreffen scheint, besteht darin, dass Sie mit dem Git-Client möglicherweise einen Proxy in einer Umgebungsvariablen angeben können.
Michael Burr

Ich habe die ursprüngliche Frage bearbeitet, um alle Windows-Referenzen zu entfernen, da dieses Problem per se git-spezifisch ist.
PlagueHammer



3
Die meisten Antworten in dieser Frage beziehen sich auf HTTP-Proxys. Wenn Sie einen SOCKS-Proxy haben, lesen Sie diese Frage für die HTTP / S- Protokolle und diese für das git: // -Protokoll.
Benutzer

Antworten:


1634

Zu verwendender Befehl:

git config --global http.proxy http://proxyuser:proxypwd@proxy.server.com:8080
  • Wechseln Sie proxyuserzu Ihrem Proxy-Benutzer
  • Ändern Sie proxypwdIhr Proxy-Passwort
  • Ändern Sie proxy.server.comdie URL Ihres Proxyservers
  • Wechseln Sie 8080zu dem auf Ihrem Proxyserver konfigurierten Proxy-Port

Beachten Sie, dass dies sowohl für http- als auch für https-Repos funktioniert.

Wenn Sie sich jederzeit dazu entschließen, diesen Proxy zurückzusetzen und ohne Proxy zu arbeiten:

Zu verwendender Befehl:

git config --global --unset http.proxy

So überprüfen Sie abschließend den aktuell eingestellten Proxy:

git config --global --get http.proxy

15
Danke Salim. Meins funktionierte ohne den Proxyuser: proxypwd in der URL.
Kwex

11
Danke Leute. Für mich war es eine NTLM-basierte Authentifizierung und nur das Aktualisieren meiner .gitconfig funktionierte nicht :(. Also musste ich CNTLM erhalten, das die NTLM-Authentifizierung verwendet. Alles, was ich tun musste, war, mein CNTLM auf den Proxyserver meines Netzwerks zu verweisen und dann auf meine Software zu verweisen Update Manager (wie yum, apt-get oder ssh) auf den lokalen Proxy. Bei Git-Operationen wie Clone ziehen Sie die http.proxy war mein lokal konfigurierter Proxy mit dem lokalen Server.
Mayur Nagekar

9
Hallo, wie kann ich den Proxypass einstellen, wenn er das Zeichen "@" hat? Ich weiß, dass ich diesen Charakter
formen

13
@patricK Sie können %40als Ersatz für die @Zeichenfolge in Benutzername / Passwort verwenden, obwohl ich dies selbst nicht getestet habe. Ich hoffe es hilft. :-)
Sourav Ghosh

14
@patricK Ich kann bestätigen, dass die Verwendung von% 40 als Ersatz für @ funktioniert. Wenn ein Sonderzeichen nicht funktioniert, sollten Sie versuchen, es mit einer URL zu codieren. Die Kodierungen finden Sie hier: w3schools.com/tags/ref_urlencode.asp
Jon

133

Dies funktionierte für mich unter Windows XP hinter einer Unternehmensfirewall.

Ich musste keinen lokalen Proxy oder eine andere Software außer git v1.771 von http://code.google.com/p/msysgit/downloads/list?can=3 installieren

$ git config --global http.proxy http://proxyuser:proxypwd@proxy.server.com:8080
$ git config --system http.sslcainfo /bin/curl-ca-bundle.crt
$ git remote add origin https://mygithubuser:mygithubpwd@github.com/repoUser/repoName.git
$ git push origin master

proxyuser = der Proxy-Benutzer, den ich von unserer IT-Abteilung zugewiesen bekommen habe. In meinem Fall ist es derselbe Windows-Benutzer, mit dem ich mich bei meinem PC anmelde , der Active Directory-Benutzer

proxypwd = das Passwort meines Proxy-Benutzers

proxy.server.com:8080 = Der Name und der Port des Proxys. Ich habe ihn über die Systemsteuerung, Internetoptionen, Verbindungen, Schaltfläche LAN- Einstellungen, Schaltfläche Erweitert im Abschnitt Proxyserver erhalten. Verwenden Sie den Servernamen und den Port in der ersten Zeile (http) .

mygithubuser = der Benutzer, mit dem ich mich bei github.com anmelde

mygithubpwd = das Passwort für meinen Benutzer github.com

repoUser = der Benutzer des Repos

repoName = der Name des Repos


2
Hurra, danke! git config --global http.sslcainfo MY_NEW_CERTS_BUNDLE.crtplus Zertifikate, die wie unter simplicidade.org/notes/archives/2011/06/… beschrieben heruntergeladen wurden (danke an: stackoverflow.com/a/7206627/98528 ) haben es für mich getan!
akavel

3
Scheint für mich zu funktionieren, aber Git funktioniert immer noch nicht, wenn ich ihn auffordere, ein Repository mithilfe des git://Protokolls zu klonen .
Ajedi32

3
Einige Erläuterungen zu den Informationen von pablolic, basierend auf dem, was für mich funktioniert hat: 1) Wenn der Proxy-Benutzer ein Windows-Login ist, lassen Sie die AD-Domäne weg, geben Sie einfach den Benutzernamen ohne die Domäne an. 2) Leerzeichen im Proxypwd sollten als "+" codiert werden. zB sollte "Mein Passwort" als "Mein + Passwort" eingegeben werden.
Simon Tewsi

2
@ EdmundYeung99: Ich würde vorschlagen, das @ -Symbol durch% 40 zu ersetzen. Ich habe es nicht ausprobiert, aber ich glaube, das ist die Standard-URL-Codierung.
Simon Tewsi

2
@demongolem: Ich vermute, Sie müssen möglicherweise Ihr Passwort per URL verschlüsseln (habe es nicht ausprobiert, dies ist nur eine fundierte Vermutung). Siehe die Spalte UrlEncoded in der Tabelle in der folgenden Antwort: stackoverflow.com/a/11236038/216440 In Ihrem Fall würde dies bedeuten, das $ durch% 24 zu ersetzen.
Simon Tewsi

52

Legen Sie eine Systemvariable http_proxymit dem Wert von fest ProxyServer:Port. Das ist die einfachste Lösung. Verwenden https_proxySie jeweils, wie in den Kommentaren erwähnt , daefu.

Das Festlegen von gitproxy (wie von sleske erwähnt) ist eine weitere Option, für die jedoch ein "Befehl" erforderlich ist, der nicht so einfach ist wie die obige Lösung.

Referenzen: http://bardofschool.blogspot.com/2008/11/use-git-behind-proxy.html


10
Oder verwenden Sie 'https_proxy', wenn Sie eine Verbindung zu einem https-Repository herstellen.
Daefu

1
@daefu: Nicht sicher, ob Sie https_proxy festlegen müssen. Ich bin mit einem https-Repository verbunden und habe den ersten Schritt der Anweisungen von pablolic befolgt (dh das Hinzufügen von http.proxy zur Git-Konfigurationsdatei). Das war alles was ich brauchte.
Simon Tewsi

3
https_proxy wurde für mich benötigt. Nur Einstellung http_proxy nicht erlauben es eine HTTPS - Repo zu klonen
explunit

@daefu +1 dies funktioniert auch mit Witwen Github - bezogene Frage: stackoverflow.com/questions/16216176/…
blue-sky

4
@SimonTewsi @explunit Beim Festlegen von Umgebungsvariablen http_proxyist dies für HTTP-URLs und https_proxyfür HTTPS-URLs erforderlich. Alternativ könnte man einfach all_proxyfür alle URLs setzen. Siehe ENVIRONMENTAbschnitt in Locke (1) . Beim Festlegen der git-config-Optionen wird http.proxyjedoch sowohl für HTTP- als auch für HTTPS-URLs verwendet. Siehe http.proxyin git-config (1) .
Susam Pal

43

Wenn die Befehlszeilenmethode zum Konfigurieren Ihres Proxyservers nicht funktioniert, können Sie wahrscheinlich einfach .gitconfig bearbeiten (im Stammverzeichnis Ihres Profils, das sich möglicherweise sowohl in C: \ Dokumente und Einstellungen als auch auf einem Netzwerklaufwerk verbirgt) und hinzufügen ::

[http]
    proxy = http://username:password@proxy.at.your.org:8080

YMMV deckt jedoch nur den ersten Schritt der Befehlszeilenkonfiguration ab. Möglicherweise müssen Sie auch die System-Git-Konfiguration bearbeiten, und ich habe keine Ahnung, wo sie das versteckt haben.


1
"Möglicherweise müssen Sie auch die System-Git-Konfiguration bearbeiten". Nein, normalerweise nicht. Das System und die Benutzerkonfiguration werden kombiniert. Das Einstellen des Proxys in einem der beiden sollte ausreichen.
Sleske

In meinem Fall befindet es sich auf meinem Windows-Computer in [git home] \ etc \ gitconfig - nach der Bearbeitung funktioniert es wie ein Zauber!
Barmaley Red Star

Dies ist besonders nützlich, wenn die Befehlszeile Ihr Kennwort aufgrund von Sonderzeichen nicht mag.
Origin

37

Alternativ zur Verwendung git config --global http.proxy address:portkönnen Sie den Proxy in der Befehlszeile festlegen:

git -c "http.proxy=address:port" clone https://...

Der Vorteil ist, dass der Proxy nicht dauerhaft festgelegt ist. Unter Bash können Sie einen Alias ​​festlegen:

alias git-proxy='git -c "http.proxy=address:port"'

22

Wenn Sie Ubuntu verwenden, gehen Sie wie folgt vor ...

Schritt 1: Korkenzieher einbauen

$ sudo apt-get install corkscrew

Schritt 2: Schreiben Sie ein Skript mit dem Namen git-proxy.sh und fügen Sie Folgendes hinzu

#!/bin/sh

exec corkscrew <name of proxy server> <port> $*

# <name_of_proxy_server> and <port> are the ip address and port of the server
# e.g. exec corkscrew 192.168.0.1 808 $*

Schritt 3: Machen Sie das Skript ausführbar

$ chmod +x git-proxy.sh

Schritt 4: Richten Sie den Proxy-Befehl für GIT ein, indem Sie die Umgebungsvariable festlegen

$ export GIT_PROXY_COMMAND="/<path>/git-proxy.sh"

Verwenden Sie nun die git-Befehle wie z

git clone git://git.kernel.org/pub/scm/linux/kernel/git/torvalds/linux.git

Sie sollten wahrscheinlich "$@"anstelle von verwenden $*. Weitere Informationen finden Sie in Ihrem Shell-Handbuch.
Hynek-Pichi-Vychodil

15

Das gleiche Problem wurde aufgrund mehrerer .gitconfigDateien in Windows festgestellt. Führen Sie die folgenden Schritte aus, um dasselbe Problem zu beheben:

Schritt 1: Öffnen Sie Git BASH

Schritt 2: Suchen Sie nach dem .gitconfigfolgenden Befehl und führen Sie ihn aus:

git config --list --global --show-origin

Schritt 3: Kopieren Sie den folgenden Inhalt in .gitconfig:

[http]
    proxy = http://YOUR_PROXY_USERNAME:YOUR_PROXY_PASSWORD@YOUR.PROXY.SERVER:YOUR.PROXY.SERVER.PORT
    sslverify = false
[https]
    proxy = http://YOUR_PROXY_USERNAME:YOUR_PROXY_PASSWORD@YOUR.PROXY.SERVER:YOUR.PROXY.SERVER.PORT
    sslverify = false
[url "http://github.com/"]
    insteadOf = git://github.com/

[user]
    name = Arpit Aggarwal
    email = aggarwalarpit.89@gmail.com

12

Versuchen Sie, Folgendes in die Datei ~ / .gitconfig einzufügen:

[http]
    proxy = http://proxy:8080
[https]
    proxy = http://proxy:8080
[url "https://"]
    insteadOf = git://

1
Ich habe alles oben ausprobiert. Erst als ich den hier aufgeführten https-Eintrag hinzufügte, konnte ich arbeiten.
Brent Fisher

11

Installieren Sie für das Git-Protokoll (Git: // ...) socat und schreiben Sie ein Skript wie:

#!/bin/sh

exec socat - socks4:your.company.com:$1:$2

Machen Sie es ausführbar, fügen Sie es in Ihren Pfad und in Ihren ~/.gitconfigSatz core.gitproxyauf den Namen dieses Skripts ein.


Funktioniert auch für Fenster mit Cygwins SOCAT. usingsocat STDIO PROXY:%proxy%:%1:%2,proxyport=%PROXYPORT%
davenpcj

1
Kann verwendet werden set GIT_PROXY_COMMAND=path\to\script, um GIT dazu zu bringen, den Proxy zu verwenden, ohne die Git-Konfiguration zu beeinträchtigen.
Davenpcj

Ja! Endlich der richtige Hinweis! Ich brauchte auch eine Authentifizierung: exec socat STDIO PROXY: <proxy>: $ 1: $ 2, proxyport = <port>, proxyauth = <user>: <passwd> Hier zu finden: gist.github.com/sit/49288
Joachim

11

Es gibt etwas, das mir aufgefallen ist und das ich hier teilen möchte:

git config --global http.proxy http://<proxy address>:<port number>

Die obige Methode funktioniert nicht für SSH-URLs (dh git@github.com:<user name>/<project name>.git):

git clone git@github.com:<user name>/<project name>.git // will not use the http proxy

Und die Dinge werden sich nicht ändern, wenn wir SSH über den HTTPS-Port ( https://help.github.com/de/articles/using-ssh-over-the-https-port ) einstellen, da nur der Port geändert wird (standardmäßig 22) ) die ssh verbindung verbindet sich mit.

(Kein englischer Muttersprachler, bitte verfeinern Sie meine Worte, falls erforderlich)


7

Ich arbeite unter Windows XP bei der Arbeit (state / gov), also habe ich meine Nachforschungen angestellt und dies hier gefunden und es hat für mich funktioniert. Hoffe das hilft :)

Die Umgebungsvariable http_proxy

Wenn Sie einen Proxyserver oder eine Firewall verwenden, müssen Sie möglicherweise die Umgebungsvariable http_proxy festlegen, um über die Befehlszeile auf eine URL zugreifen zu können. Beispiel: Installieren von ppm für Perl oder Anwenden von RPM unter Linux, Aktualisieren von Ubuntu

Legen Sie die Variable http_proxy mit dem Hostnamen oder der IP-Adresse des Proxyservers fest: http_proxy = http: // [proxy.example.org]

Wenn der Proxyserver einen Benutzernamen und ein Kennwort benötigt, geben Sie diese in der folgenden Form an: http_proxy = http: // [Benutzername: password@proxy.example.org]

Wenn der Proxyserver einen anderen Port als 80 verwendet, geben Sie die Portnummer an: http_proxy = http: // [Benutzername: password@proxy.example.org: 8080]

Windows XP

  1. Öffnen Sie die Systemsteuerung und klicken Sie auf das Symbol System.
  2. Klicken Sie auf der Registerkarte Erweitert auf Umgebungsvariablen.
  3. Klicken Sie im Bereich Systemvariablen auf Neu.
  4. Fügen Sie http_proxy mit den entsprechenden Proxy-Informationen hinzu (siehe Beispiele oben).

Linux, Solaris oder HP-UX

Legen Sie die Umgebungsvariable http_proxy mit dem für Ihre Shell spezifischen Befehl fest (z. B. set oder export). Fügen Sie den Befehl der entsprechenden Profildatei für die Shell hinzu, um diese Änderung dauerhaft zu machen. Fügen Sie beispielsweise in bash Ihrer .bash_profile- oder .bashrc-Datei eine Zeile wie die folgende hinzu:

  1. http_proxy = http: // [Benutzername: Passwort @ Hostname: Port];
  2. exportiere $ http_proxy

tanx -> :) C: \ Users \ AT> echo% https_proxy% 172.20.4.55:808
qasem

7

Zusätzlich zu diesen Antworten fand ich es hilfreich, diese 2 Punkte zu berücksichtigen:

Möglicherweise muss ein Authentifizierungsschema erzwungen werden:

[http]
    # https://github.com/git/git/blob/master/Documentation/config.txt
    proxyAuthMethod = anyauth|basic|digest|negotiate|ntlm

In der Regel muss bei einem NTLM-Authentifizierungsschema die AD-Domäne explizit angegeben werden.

In Git Bash:

echo %userdomain%

Und aktualisieren Sie den http.proxy entsprechend:

git config --global http.proxy http://DOMAIN\\proxyuser:proxypwd@proxy.server.com:8080

Auf jeden Fall kann die Untersuchung durch Hinzufügen von CURL-Protokollen unterstützt werden:

export GIT_CURL_VERBOSE=1

Ich musste proxyAuthMethod mit hinzufügen git config --global http.proxyAuthMethod basic. Git gersion 2.8.3 hat keine Authentifizierung gesendet, bis ich diesen Konfigurationsparameter festgelegt habe.
HeatfanJohn

5

Wenn Sie Tsocks oder Proxy-Ketten installiert und konfiguriert haben, können Sie dies tun

$ tsocks git clone <you_repository>

oder

$ proxychains git clone <you_repository>

Um es kürzer zu machen, habe ich einen Symbol-Link /usr/bin/pfür erstellt proxychains, damit ich ihn so verwenden kann

p git clone <you_repository>

und ich kann es verwenden, um jeden Befehl zu vertreten,

p <cmd-need-be-proxied>

Übrigens, Proxychains werden schon lange nicht mehr aktualisiert. Vielleicht möchten Sie Proxychians-ng ausprobieren


4

Git-Proxy am Terminal einstellen

wenn

  • Sie möchten nicht für jedes Ihrer Git-Projekte einzeln einen Proxy festlegen
  • Sie möchten immer denselben Proxy für alle Ihre Projekte verwenden

Stellen Sie es einmal global ein

git config --global http.proxy username:password@proxy_url:proxy_port
git config --global https.proxy username:password@proxy_url:proxy_port

Wenn Sie einen Proxy nur für ein Git-Projekt festlegen möchten (in einigen Situationen möchten Sie möglicherweise nicht denselben Proxy oder überhaupt keinen Proxy für einige Git-Verbindungen verwenden).

//go to project root
cd /bla_bla/project_root
//set proxy for both http and https
git config http.proxy username:password@proxy_url:proxy_port
git config https.proxy username:password@proxy_url:proxy_port

Wenn Sie die aktuellen Proxy-Einstellungen anzeigen möchten

git config --list 

Wenn Sie den Proxy global entfernen möchten

git config --global --unset http.proxy
git config --global --unset https.proxy

Wenn Sie den Proxy für nur einen Git-Root entfernen möchten

//go to project root
cd /bla-bla/project_root
git config --unset http.proxy
git config --unset https.proxy

3

Hier ist die Proxy-Einstellung

git config --global http.proxy http://<username>:<pass>@<ip>:<port>
git config --global https.proxy http://<username>:<pass>@<ip>:<port>

3

Ich folgte den meisten Antworten, die hier empfohlen wurden. Zuerst habe ich folgenden Fehler bekommen:

Schwerwiegend: Zugriff auf ' https://github.com/folder/sample.git/ ' nicht möglich: schannel: next InitializeSecurityContext fehlgeschlagen: Unbekannter Fehler (0x80092012) - Die Widerrufsfunktion konnte den Widerruf für das Zertifikat nicht überprüfen.

Dann habe ich den folgenden Befehl von @Salim Hamidi ausprobiert

git config --global http.proxy http://proxyuser:proxypwd@proxy.server.com:8080

Aber ich habe folgenden Fehler bekommen:

Schwerwiegend: Zugriff auf ' https://github.com/folder/sample.git/ ' nicht möglich: HTTP-Code 407 vom Proxy nach CONNECT empfangen

Dies kann passieren, wenn der Proxyserver das SSL-Zertifikat nicht überprüfen kann. Wir möchten daher sicherstellen, dass die SSL-Überprüfung deaktiviert ist (nicht für nicht vertrauenswürdige Sites empfohlen). Daher habe ich die folgenden Schritte ausgeführt, die von @Arpit empfohlen wurden, jedoch mit geringfügigen Änderungen:

1. Stellen Sie zunächst sicher, dass Sie alle vorherigen Proxy-Einstellungen entfernen:

git config --global --unset http.proxy

2.Listen Sie dann den Inhalt von gitconfig auf und rufen Sie ihn ab

git config --list --show-origin

3. Aktualisieren Sie zuletzt den Inhalt der gitconfig-Datei wie folgt:

[http]
sslCAInfo = C:/yourfolder/AppData/Local/Programs/Git/mingw64/ssl/certs/ca-bundle.crt
sslBackend = schannel
proxy = http://proxyuser:proxypwd@proxy.server.com:8080
sslverify = false
[https]
proxy = http://proxyuser:proxypwd@proxy.server.com:8080
sslverify = false

3

Ich habe alle oben genannten Antworten ausprobiert und nichts hat bei mir funktioniert, da Probleme mit der Proxy-Kennwortcodierung aufgetreten sind.

Dieser Befehl hat funktioniert:

git config --global http.proxy http://username@proxy.example.com:PortNumber 

Geben Sie das Passwort nicht in Ihren Befehl ein. Es wird dynamisch gefragt, wann Sie versuchen, eine Verbindung zu einem Git-Repo herzustellen.


Danke, das hat bei mir funktioniert. Obwohl die Git-Konfigurationseinstellung http.proxy
ochhii

Benutzername ist nicht genug. Passwort auch erforderlich.
Dinith

Verwenden Sie diesen Code {git config --global http.proxy proxyuser: proxypwd@proxy.server.com: 8080 }
Dinith

2

Für Windows-Benutzer: if git config oder set http_proxy=nicht funktioniert, diese Antwort kann helfen:

Ersetzen Sie das git://Protokoll des Git-Repositorys durch http://. Beachten Sie, dass Sie http_proxysowieso die erste einstellen müssen.


0

Nachdem ich unermüdlich jede Lösung auf dieser Seite ausprobiert hatte, bestand meine Aufgabe darin, stattdessen einen SSH-Schlüssel zu verwenden!

  1. Öffnen Sie Git Bash
  2. $ ssh-keygen.exe -t rsa -C
  3. Öffnen Sie Ihren Git-Provider (Github, Bitbucket usw.)
  4. Fügen Sie den Inhalt der Datei id_rsa.pub in die Eingabeseite des Git-Anbieters ein (überprüfen Sie Ihr Profil).
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.