Использование прокси-сервера socks с git для транспорта http

Как заставить git использовать прокси socks для транспорта HTTP?

Мне удалось настроить git с помощью GIT_PROXY_COMMAND для использования socks-прокси для транспорта GIT.

Кроме того, я настроил свой файл .curlrc для определения прокси socks, и я могу получать информацию напрямую с помощью команды curl, например:

curl http://git.kernel.org/pub/scm/git/git.git/info/refs?service=git-upload-pack

Но как использовать прокси socks с git для извлечения данных с использованием транспортного протокола HTTP, например:

git clone http://git.kernel.org/pub/scm/git

Ответы

Ответ 1

Я тестировал с Git 1.8.2 и SOCKS v5 прокси, у меня работает следующая настройка:

git config --global http.proxy 'socks5://127.0.0.1:7070'

ОБНОВЛЕНИЕ 2017-3-31:

Согласно документу, несмотря на имя http.proxy, он должен работать как для URL-адресов HTTP, так и для HTTPS-репозиториев. Спасибо @user за указание на это.

ОБНОВЛЕНИЕ 2018-11-27:

Чтобы отключить прокси, выполните команду:

git config --global --unset http.proxy

ОБНОВЛЕНИЕ 2019-03-04:

Если вы также хотите, чтобы имя хоста было разрешено с использованием прокси, используйте приведенное ниже решение thuzhf, которое использует socks5h вместо socks5

Ответ 2

Если вы не хотите устанавливать прокси в качестве глобальной конфигурации, попробуйте ALL_PROXY= например:

$ ALL_PROXY=socks5://127.0.0.1:8888 git clone https://github.com/some/one.git

Ответ 3

(Немного напоминания) Если вы хотите, чтобы имя хоста также разрешалось прокси (это означает, что передается все через прокси), особенно когда вы клонируете gist, вы можете использовать следующий параметр (ключ состоит в том, что он использует socks5h вместо socks5):

git config --global http.proxy socks5h://127.0.0.1:1080

Ответ 4

Я использую следующую команду для клонирования определенного репозитория из прокси-сервера socks5. Настройки прокси задаются с помощью опции --config.

$ git clone https://github.com/xxxxx --config 'http.proxy=socks5://127.0.0.1:1234'

Ответ 5

Примечание: патч здесь был применен к git в 2015 году для версии 2.4.11. С тех пор вы можете просто использовать socks://urls с настройками конфигурации http.proxy.

Для протокола git://у нас есть Использование Git с прокси-сервером SOCKS. Однако, похоже, что git не поддерживает прокси-носители должным образом. Сам git связан с libcurl. Таким образом, файл .curlrc не используется (это только для клиента командной строки curl). Однако следующий патч обеспечивает необходимую поддержку. С помощью этого патча, примененного к git, мы можем просто установить переменную окружения ALL_PROXY или HTTP_PROXY или HTTPS_PROXY в socks://hostname:portnum (или socks4/socks5) или действительно в настройке git config http.proxy и libcurl теперь будут фактически использовать протокол socks при использовании прокси.

Например, активная трассировка:

$ GIT_CURL_VERBOSE=1 bin-wrappers/git -c "http.proxy=socks://localhost:1080" ls-remote http://github.com/patthoyts/tclftd2xx.git
* Couldn't find host github.com in the _netrc file; using defaults
* About to connect() to proxy localhost port 1080 (#0)
*   Trying 127.0.0.1...
* connected
* SOCKS4 request granted.
* Connected to localhost (127.0.0.1) port 1080 (#0)
> GET /patthoyts/tclftd2xx.git/info/refs?service=git-upload-pack HTTP/1.1
User-Agent: git/1.8.1.msysgit.1.dirty
... and on to a successful request ...

Необходимый патч:

diff --git a/http.c b/http.c
index 3b312a8..f34cc75 100644
--- a/http.c
+++ b/http.c
@@ -322,6 +322,14 @@ static CURL *get_curl_handle(void)
        if (curl_http_proxy) {
                curl_easy_setopt(result, CURLOPT_PROXY, curl_http_proxy);
                curl_easy_setopt(result, CURLOPT_PROXYAUTH, CURLAUTH_ANY);
+#if LIBCURL_VERSION_NUM >= 0x071800
+               if (!strncmp("socks5", curl_http_proxy, 6))
+                       curl_easy_setopt(result, CURLOPT_PROXYTYPE, CURLPROXY_SOCKS5);
+               else if (!strncmp("socks4a", curl_http_proxy, 7))
+                       curl_easy_setopt(result, CURLOPT_PROXYTYPE, CURLPROXY_SOCKS4A);
+               else if (!strncmp("socks", curl_http_proxy, 5))
+                       curl_easy_setopt(result, CURLOPT_PROXYTYPE, CURLPROXY_SOCKS4);
+#endif
        }

        return result;

Ответ 6

Просто применительно к @briankip и удалению параметра http proxy как Yang.Y, упомянутого вами, вы можете напрямую редактировать ini файл.

Вы также можете сделать это в командной строке, используя

git config --global --unset http.proxy

Чтобы подтвердить, что оно было удалено, введите текущую конфигурацию, используя

git config --list

Ответ 7

Вы можете попробовать временный сетевой прокси ALL_PROXY=socks5://127.0.0.1:8888 git clone https://github.com/your/link.git 8888 - ваш прокси-порт, вы можете его изменить, обычно 1080.