Использовать прокси только для определенных 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, который совпадает с путем к ключу конфигурации, предпочтительнее, чем тот, который соответствует его имени пользователя.
Например, если URL https://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

У меня была аналогичная проблема, когда я нахожусь за своим корпоративным прокси. В основном у меня есть два типа репозиториев:

  1. Внешний - которому нужен прокси
  2. Внутренний - не требующий прокси

Мне пришлось установить прокси в глобальной конфигурации, которая будет действовать по умолчанию, если иное не указано в локальной конфигурации.

Итак, ниже приведены команды для настройки:

установить глобальную конфигурацию с прокси

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
Другие вопросы по тегам