I've got MSysGit (Git on Windows) working just fine on my home machine, but at work, where we are behind a Microsoft ISA proxy, I get the following error when I do a Git clone:
H:
cd \
git clone git://github.com/akitaonrails/vimfiles.git
Output:
Initialized empty Git repository in H:/vimfiles/.git/
github.com[0: 65.74.177.129]: errno=Invalid argument
fatal: unable to connect a socket (Invalid argument)
I've tried setting the http_proxy environment variable to:
http://our-proxy-server:8088
I've set the Git http.proxy configuration directive:
git config --global http.proxy http://our-proxy-server:8088
Neither of the above makes a difference.
Doing a Git clone with http://
instead of git://
yields this:
H:
cd \
git clone http://github.com/akitaonrails/vimfiles.git
Output:
Initialized empty Git repository in H:/vimfiles/.git/
fatal: http://github.com/akitaonrails/vimfiles.git/info/refs download error - The requested URL returned error: 407
407 is of course an authentication error.
Is there a way to get Git working from behind a proxy, specifically an ISA proxy? I don't know if it's going to be worth pursing this.
I had the exact same error; but the ~/.gitconfig
global config file was the key.
If you have a proxy with authentication you need to put in it:
git config --global http.proxy http://login:password@our-proxy-server:8088
And it just works (with 'git clone http:
')
Example of a blog detailing the same setup: GIT clone over HTTP: who knew?
If it still fails in 407, it could be related to a problem with git-fetch losing authentication tokens on the second HTTP GET. A more recent version of libcurl might be needed.
Update January 2011: jbustamovej mentions in his answer (upvoted) his blog post "GitHub Behind Corporate Proxy", which adds this:
It’s important to note that if your login has a backslash, as in
domain\login
, you must escape the backslash, as in:
git config --global http.proxy http://domain\\\login:password@our-proxy-server:8088
Also, the value of http.proxy
can have "path
" at the end for a socks proxy that listens to a unix-domain socket, but Git started to discard it when proxy was taught auth code path to use the credential helpers: that has been corrected with Git 2.47 (Q4 2024), batch 4.
See commit 0ca365c (02 Aug 2024) by Ryan Hendrickson (rhendric
).
(Merged by Junio C Hamano -- gitster
-- in commit 4bad011, 14 Aug 2024)
http
: do not ignore proxy pathCo-authored-by: Jeff King
Signed-off-by: Jeff King
Signed-off-by: Ryan Hendrickson
The documentation for
http.proxy
describes that option, and the environment variables it overrides, as supporting "the syntax understood bycurl
".
curl
allowsSOCKS
proxies to use a path to a Unix domain socket, likesocks5h://localhost/path/to/socket.sock
.
Git should therefore include, if present, the path part of the proxy URL in what it passes to libcurl.
git config
now includes in its man page:
'
[protocol://][user[:password]@]proxyhost[:port][/path]
'. This can be overridden on a per-remote basis; seeremote.<name>.proxy
.