Использование прокси-сервера 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.