# Configure Git to use a proxy

> Source: <https://gist.github.com/evantoli/f8c23a37eb3558ab8765>
> Published: 2016-01-12 01:02:18+00:00

# Configure Git to use a proxy

## In Brief

You may need to configure a proxy server if you're having trouble cloning 
or fetching from a remote repository or getting an error 
like `unable to access '...' Couldn't resolve host '...'`.

Consider something like:

```
git config --global http.proxy http://proxyUsername:proxyPassword@proxy.server.com:port
```

Or for a specific domain, something like:

```
git config --global http.https://domain.com.proxy http://proxyUsername:proxyPassword@proxy.server.com:port
git config --global http.https://domain.com.sslVerify false
```

Setting `http.<url>.sslVerify` to `false` may help you quickly get going if your workplace 
employs man-in-the-middle HTTPS proxying. Longer term, you could get the 
root CA that they are applying to the certificate chain
and specify it with either `http.sslCAInfo` or `http.sslCAPath`.

See also the [git-config](https://git-scm.com/docs/git-config) documentation, especially the following 
sections if you're having HTTPS/SSL issues
 
 * `http.sslVerify`
 * `http.sslCAInfo`
 * `http.sslCAPath`
 * `http.sslCert`
 * `http.sslKey`
 * `http.sslCertPasswordProtected`

## In Detail

### Configure the proxy 

You can configure these globally in your user `~/.gitconfig` file using the `--global` switch, or local to a repository in its `.git/config` file.

#### Setting a global proxy

Configure a global proxy if all access to all repos require this proxy

```
git config --global http.proxy http://proxyUsername:proxyPassword@proxy.server.com:port
```

#### URL specific proxy

If you wish to specify that a proxy should be used for just 
some URLs that specify the URL as a git config subsection
using `http.<url>.key` notation:

```
git config --global http.https://domain.com.proxy http://proxyUsername:proxyPassword@proxy.server.com:port
```

Which will result in the following in the `~/.gitconfig` file:

```
[http]
[http "https://domain.com"]
	proxy = http://proxyUsername:proxyPassword@proxy.server.com:port
```

#### Handle subsequent SSL protocol errors

If you're still having trouble cloning or fetching and are now getting 
an `unable to access 'https://...': Unknown SSL protocol error in connection to ...:443` then
you may decide to switch off SSL verification for the single operation 
by using the `-c http.sslVerify=false` option

```
git -c http.sslVerify=false clone https://domain.com/path/to/git
```

Once cloned, you may decide set this for just this cloned 
repository's `.git/config` by doing. Notice the absence of the `--global`

```
git config http.sslVerify false
```

If you choose to make it global then limit it to a URL using 
the `http.<url>.sslVerify` notation: 

```
git config --global http.https://domain.com.sslVerify false
```

Which will result in the following in the `~/.gitconfig` file:

```
[http]
[http "https://domain.com"]
	proxy = http://proxyUsername:proxyPassword@proxy.server.com:port
	sslVerify = false
```

### Show current configuration

To show the current configuration of all `http` sections

```
git config --global --get-regexp http.*
```

If you are in a locally cloned repository folder then you drop 
the `--global` and see all current config:

```
git config --get-regexp http.*
```

### Unset a proxy or SSL verification

Use the `--unset` flag to remove configuration being specific about the
property -- for example whether it was `http.proxy` or `http.<url>.proxy`. 
Consider using any of the following:

```
git config --global --unset http.proxy
git config --global --unset http.https://domain.com.proxy

git config --global --unset http.sslVerify
git config --global --unset http.https://domain.com.sslVerify

```

