windowsgitproxymsysgit

Git error: fatal: unable to connect a socket (Invalid argument)


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.


Solution

  • 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 path

    Co-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 by curl".
    curl allows SOCKS proxies to use a path to a Unix domain socket, like socks5h://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; see remote.<name>.proxy.