web-dev-qa-db-ja.com

HTTPトランスポートにGitでSOCKSプロキシを使用する

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
59
Yves Blusseau

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のソリューションを使用します

111
Yang.Y

プロキシをグローバル構成として設定したくない場合は、ALL_PROXY=例:

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

(少し注意してください)ホスト名もプロキシで解決する場合(つまり、プロキシを介してすべてを渡す)、特にGistを複製する場合は、次の設定を使用できます(キーはsocks5の代わりにsocks5hを使用することです):

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

次のコマンドを使用して、socks5プロキシから特定のリポジトリを複製します。プロキシ設定は、--configオプションで指定されます。

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

注:ここのパッチは、バージョン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;
7
patthoyts

Yang.Yが述べたように、@ briankipを参照し、httpプロキシ設定を削除するだけで、iniファイルを直接編集できます。

また、コマンドラインでこれを行うこともできます

git config --global --unset http.proxy

削除されたことを確認するには、現在の構成をリストします

git config --list

3
Paul H

一時的なネットワークプロキシを試すことができますALL_PROXY=socks5://127.0.0.1:8888 git clone https://github.com/your/link.git 8888はプロキシポートであり、通常は1080に変更できます。

0
WeiCrane