Использовать прокси только для определенных 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

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

  1. External- которым нужен прокси
  2. 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