Использовать прокси только для определенных git URL-адресов/доменов?
Можно ли настроить git на использование прокси только для определенных доменов?
Я хотел бы использовать наш корпоративный прокси для доступа к Github, но не оставлять его для доступа к нашим собственным внутренним репозиториям git.
Я использую bower, и для этого нужны элементы как в нашем брандмауэре, так и в github, поэтому я не могу сделать это как настройку для каждого проекта. Это должен быть какой-то вариант глобальной конфигурации. Любые мысли?
Ответы
Ответ 1
Обычно я использую переменные среды:
Подбирается git при доступе к репозиторию GitHub.
Примечание:
- оба
http_proxy
и https_proxy
должны использовать URL-адрес http://
прокси-сервера (no https://
).
- всегда используйте fqn (полное квалифицированное имя)
proxydomain
(не полагайтесь на его короткое имя)
Но для внутреннего репо все, что мне нужно сделать, это определить и экспортировать еще одну переменную среды:
-
no_proxy=.my.company,localhost,127.0.0.1,::1
, для доступа к любому репо с адресом типа myrepo.my.company
или localhost.
Вы можете определить NO_PROXY
или NO_PROXY
, это не имеет значения.
Но на всякий случай я всегда устанавливаю http_proxy
, https_proxy
, http_proxy
, https_proxy
, NO_PROXY
и NO_PROXY
.
Ответ 2
Чтобы добавить еще одну возможность, вы можете определить прокси-сервер через git config http.proxy
.
git config --global http.proxy http://mydomain\\myusername:[email protected]:proxyport
Но то, что действительно опрятно, начало git1.8.5 (октябрь 2013 г.), вы можете установить настройки http на url.
Теперь переменные "http.*
" могут быть указаны для каждого URL-адреса, который применяется в конфигурации.
Например,
[http]
sslVerify = true
[http "https://weak.example.com/"]
sslVerify = false
будет отключать http.sslVerify
только при разговоре с указанным сайтом.
См. commit d4770964d5:
$ git config --bool --get-urlmatch http.sslVerify https://good.example.com
true
$ git config --bool --get-urlmatch http.sslVerify https://weak.example.com
false
Только с указанным <section>
вы можете получить список всех переменных в разделе с их значениями, которые относятся к данному URL. Например
$ git config --get-urlmatch http https://weak.example.com
http.sslverify false
Все подробности находятся в commit 6a56993b:
http.<url>.*::
Любой из приведенных выше параметров http. * может быть применен выборочно к некоторым URL-адресам.
Чтобы ключ конфигурации соответствовал URL-адресу, каждый элемент ключа конфигурации сравнивается с элементом URL-адреса в следующем порядке:
- Схема (например,
https
в https://example.com/
).
- Имя хоста/домена (например,
example.com
в https://example.com/
).
- Номер порта (например,
8080
в http://example.com:8080/
).
- Путь (например,
repo.git
в https://example.com/repo.git
).
- Имя пользователя (например,
user
в https://[email protected]/repo.git
)
Приведенный выше список упорядочивается с уменьшением приоритета; URL, который соответствует пути ключа конфигурации, предпочтительнее того, который соответствует его имени пользователя.
Например, если URL-адрес https://[email protected]/foo/bar
, соответствие конфигурационного ключа https://example.com/foo
будет предпочтительным по сравнению с совпадением конфигурации ключа https://[email protected]
.
Все URL-адреса нормализуются, прежде чем пытаться выполнить какое-либо сопоставление (часть пароля, если она встроена в URL-адрес, всегда игнорируется для соответствия), так что эквивалентные URL-адреса, которые просто написаны по-разному, будут соответствовать правильно.
Параметры переменной окружения всегда переопределяют любые соответствия.
Подходящие URL-адреса связаны с командами Git.
Это означает, что любые URL-адреса + посещенные в результате перенаправления не участвуют в сопоставлении.
Ответ 3
Как уже упоминалось здесь, вы можете сделать это, указав URL-адрес вместе с настройками прокси-сервера, но здесь вариант использования, который исправил это для меня. Благодаря VonC выше!
Обратите внимание, что я указываю корень сервера Git. Полный путь к клонированию Git, который вы клонировали, не требуется. Вы можете использовать единую запись для обслуживания всего сервера.
Добавьте в свой файл .gitconfig следующее. В моей системе Windows я использую% userprofile% \. Gitconfig
[http]
proxy = http://my.proxy.net:8080
[https]
proxy = http://my.proxy.net:8443
[http "http://my.internalgitserver.com/"]
proxy = ""
Ответ 4
Вы можете настроить различные параметры конфигурации для каждого пульта. Скажем, у нас есть 2 пульта, названных origin
и upstream
соответственно. Вы настраиваете прокси для каждого из следующих действий:
git config --path remote.origin.proxy http://user:[email protected]_for_origin:8080
git config --path remote.upstream.proxy http://user:[email protected]_for_upstream:8080
Это изменит разделы каждого удаленного в конфигурации локального репозитория (.git/config
).
Вы также можете настроить параметры глобальной конфигурации, если хотите. Поскольку нет смысла ссылаться на удаленное имя в глобальном файле конфигурации ($HOME/.gitconfig
), вы можете использовать сопоставление url (IIRC, поддерживаемый с Git 1.8.5). Пример:
[http "https://example.com/repo1.git"]
proxy = http://user:[email protected]:8080
[http "https://example.com/repo2.git"]
proxy = http://user:[email protected]:8080
Если вы хотите увидеть, что было установлено:
git config --path --get-urlmatch https://example.com/repo1.git
git config --path --get-urlmatch https://example.com/repo2.git
Ответ 5
У меня была похожая проблема, когда я за своим корпоративным прокси. У меня в основном есть два вида репозиториев:
- External- которым нужен прокси
- Internal- который не нуждается в прокси
Мне пришлось установить прокси в глобальной конфигурации, который будет действовать по умолчанию, если не указано иное в локальной конфигурации.
Ниже приведены команды для настройки:
установить глобальный конфиг с прокси
git config --global --add http.proxy "http://username:[email protected]:port"
git config --global --add https.proxy "https://username:[email protected]:port"
затем перейдите в локальный каталог, содержащий вашу папку .git и для которой вам не нужен прокси
cd "C:\Users\username\directory_without_proxy\"
установить локальный конфиг с пустым прокси
git config --local --add http.proxy ""
git config --local --add https.proxy ""
Это можно сделать и другим способом. То есть вы сохраняете глобальный конфиг как пустой и локальный конфиг с вашими настройками прокси.
Просто для двойной проверки вы можете использовать команду ниже, чтобы вывести список настроек конфигурации для глобального и локального соответственно:
git config --global --list
git config --local --list
Ответ 6
В Windows, просто [примечание без пароля] после работы для меня
git config --global http.proxy http://mydomain\\myusername:@myproxyserver:proxyport
git config --global https.proxy http://mydomain\\myusername:@myproxyserver:proxyport