Использовать прокси только для определенных git URL / доменов?
Можно ли настроить git на использование прокси только для определенных доменов?
Я хотел бы использовать наш корпоративный прокси-сервер для доступа к Github, но не использовать его для доступа к нашим собственным внутренним репозиториям Git.
Я использую bower, и для этого нужны элементы как внутри нашего брандмауэра, так и на github, поэтому я не могу сделать это в соответствии с настройками проекта. Это должна быть какая-то глобальная опция конфигурации. Какие-нибудь мысли?
5 ответов
Я обычно использую переменные среды:
http_proxy=http://username:password@proxydomain:port
https_proxy=http://username:password@proxydomain:port
Это фиксируется git при доступе к репозиторию GitHub.
Замечания:
- и то и другое
http_proxy
а такжеhttps_proxy
должен использоватьhttp://
URL прокси (нетhttps://
). - всегда используйте fqn (полное имя)
proxydomain
(не полагайтесь на его короткое имя)
Но для внутреннего репо все, что мне нужно сделать, это определить и экспортировать еще одну переменную среды:
no_proxy=.my.company,localhost,127.0.0.1,::1
, для доступа к любому репо с адресом вродеmyrepo.my.company
или местный хост.
Вы можете определить NO_PROXY
или же no_proxy
это не имеет значения.
Но на всякий случай я всегда ставлю HTTP_PROXY
, HTTPS_PROXY
, http_proxy
, https_proxy
, NO_PROXY
а также no_proxy
,
Чтобы добавить еще одну возможность, вы можете определить прокси через git config http.proxy
,
git config --global http.proxy http://mydomain\\myusername:mypassword@myproxyserver:proxyport
Но что действительно хорошо, так это то, что начиная с git1.8.5 (октябрь 2013 г.), вы можете установить настройки http для каждого URL.
" http.*
msgstr "теперь можно указывать переменные для каждого URL, к которому применяется конфигурация.
Например,
[http]
sslVerify = true
[http "https://weak.example.com/"]
sslVerify = false
будет перевернуть
http.sslVerify
отключается только при разговоре с указанным сайтом.
Смотрите коммит 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
Все детали находятся в коммите 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://user@example.com/repo.git
)
Список выше упорядочен по убыванию приоритета; URL, который совпадает с путем к ключу конфигурации, предпочтительнее, чем тот, который соответствует его имени пользователя.
Например, если URLhttps://user@example.com/foo/bar
совпадение ключа конфигурацииhttps://example.com/foo
будет предпочтительнее совпадения ключа конфигурацииhttps://user@example.com
,Все URL-адреса нормализуются перед попыткой любого соответствия (часть пароля, если она встроена в URL-адрес, всегда игнорируется для целей сопоставления), чтобы эквивалентные URL-адреса, которые просто пишутся по-разному, соответствовали должным образом.
Настройки переменных среды всегда перекрывают любые совпадения.
URL, с которыми сравниваются те, которые даны непосредственно командам Git.
Это означает, что любые URL +, посещенные в результате перенаправления, не участвуют в сопоставлении.
Как некоторые уже упоминали здесь, вы можете сделать это, указав 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 = ""
Вы можете настроить различные параметры конфигурации для каждого пульта отдельно. Допустим, у нас есть 2 пульта с именем origin
а также upstream
соответственно. Вы настраиваете прокси для каждого, выполняя следующее:
git config --path remote.origin.proxy http://user:pass@proxy_for_origin:8080
git config --path remote.upstream.proxy http://user:pass@proxy_for_upstream:8080
Это изменит разделы каждого пульта внутри вашей конфигурации локального хранилища (.git/config
).
Вы также можете настроить глобальные параметры конфигурации, если хотите. Поскольку нет смысла ссылаться на удаленное имя в глобальном конфигурационном файле ($HOME/.gitconfig
), вы можете использовать URL-сопоставление (IIRC, поддерживается с Git 1.8.5). Пример:
[http "https://example.com/repo1.git"]
proxy = http://user:pass@proxy1:8080
[http "https://example.com/repo2.git"]
proxy = http://user:pass@proxy2:8080
Если вы хотите увидеть, что было установлено:
git config --path --get-urlmatch https://example.com/repo1.git
git config --path --get-urlmatch https://example.com/repo2.git
Предположим , что ваш прокси (например, мой ss
) является: socks5://127.0.0.1:1086
конфиг git прокси
- для всех
- добавить:
git config --global http.proxy socks5://127.0.0.1:1086
- удалить:
git config --global --unset http.proxy
- добавить:
- только для определенного домена, например: https://github.com/
- добавить:
git config --global http.https://github.com.proxy socks5://127.0.0.1:1086
- удалить:
git config --global --unset http.https://github.com.proxy
- добавить:
Запись
После добавления прокси, используя
cat ~/.gitconfig
можно увидеть соответствующую глобальную конфигурацию:
[http]
proxy = socks5://127.0.0.1:1086
или
[http "https://github.com"]
proxy = socks5://127.0.0.1:1086
У меня была аналогичная проблема, когда я нахожусь за своим корпоративным прокси. В основном у меня есть два типа репозиториев:
- Внешний - которому нужен прокси
- Внутренний - не требующий прокси
Мне пришлось установить прокси в глобальной конфигурации, которая будет действовать по умолчанию, если иное не указано в локальной конфигурации.
Итак, ниже приведены команды для настройки:
установить глобальную конфигурацию с прокси
git config --global --add http.proxy "http://username:password@proxydomain:port"
git config --global --add https.proxy "https://username:password@proxydomain: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
В Windows у меня просто [примечание без пароля] работало следующее
git config --global http.proxy http://mydomain\\myusername:@myproxyserver:proxyport
git config --global https.proxy http://mydomain\\myusername:@myproxyserver:proxyport