GitにHTTPトランスポートにソックスプロキシを使用させる方法は?
GIT_PROXY_COMMANDを使用してGITを構成し、GITトランスポートにソックスプロキシを使用することに成功しました。
また、.curlrcファイルを設定してsocksプロキシを定義しました。次のようなcurlコマンドで情報を直接取得できます。
curl http://git.kernel.org/pub/scm/git/git.git/info/refs?service=git-upload-pack
しかし、次のようなHTTPトランスポートプロトコルを使用してgitでソックスプロキシを使用してデータを取得する方法:
git clone http://git.kernel.org/pub/scm/git
Git 1.8.2およびSOCKS v5プロキシでテストしましたが、次の設定が機能します。
git config --global http.proxy 'socks5://127.0.0.1:7070'
2017年3月31日更新:
ドキュメントによれば 、名前http
.proxy
にもかかわらず、両方で機能するはずですHTTPおよびHTTPSリポジトリのURL。これを指摘してくれた@userに感謝します。
更新2018-11-27:
プロキシを無効にするには、次のコマンドを実行します:
git config --global --unset http.proxy
EDIT 2019-03-04:
プロキシを使用してホスト名も解決する場合は、socks5h
の代わりにsocks5
を使用する以下のthuzhfのソリューションを使用します
プロキシをグローバル構成として設定したくない場合は、ALL_PROXY=
例:
$ ALL_PROXY=socks5://127.0.0.1:8888 git clone https://github.com/some/one.git
(少し注意してください)ホスト名もプロキシで解決する場合(つまり、プロキシを介してすべてを渡す)、特にGistを複製する場合は、次の設定を使用できます(キーはsocks5の代わりにsocks5hを使用することです):
git config --global http.proxy socks5h://127.0.0.1:1080
次のコマンドを使用して、socks5プロキシから特定のリポジトリを複製します。プロキシ設定は、--config
オプションで指定されます。
$ git clone https://github.com/xxxxx --config 'http.proxy=socks5://127.0.0.1:1234'
注:ここのパッチは、バージョン2.4.11の2015年にgitに適用されました。それ以来、http.proxy構成設定でsocks:// urlsを使用できます。
Git://プロトコルの場合、 SOCKSプロキシでGitを使用 です。ただし、gitはsocksプロキシを適切にサポートしていないようです。 git自体はlibcurlにリンクされています。そのため、.curlrcファイルは使用されません(curlコマンドラインクライアント専用です)。ただし、次のパッチは必要なサポートを提供します。このパッチをgitに適用すると、ALL_PROXY環境変数またはHTTP_PROXYまたはHTTPS_PROXYをsocks://hostname:portnum
(またはsocks4/socks5)または実際にhttp.proxy git config設定と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;
Yang.Yが述べたように、@ briankipを参照し、httpプロキシ設定を削除するだけで、iniファイルを直接編集できます。
また、コマンドラインでこれを行うこともできます
git config --global --unset http.proxy
削除されたことを確認するには、現在の構成をリストします
git config --list
一時的なネットワークプロキシを試すことができますALL_PROXY=socks5://127.0.0.1:8888 git clone https://github.com/your/link.git
8888はプロキシポートであり、通常は1080に変更できます。