Sử dụng proxy vớ với git cho truyền tải http


81

Làm thế nào để làm cho git sử dụng một proxy vớ cho truyền tải HTTP?

Tôi thành công trong việc định cấu hình git với GIT_PROXY_COMMAND để sử dụng proxy tất cho truyền tải GIT.

Ngoài ra, tôi đã định cấu hình tệp .curlrc của mình để xác định proxy vớ và tôi có thể tìm nạp thông tin trực tiếp bằng lệnh curl như:

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

Nhưng cách sử dụng proxy vớ với git để truy xuất dữ liệu bằng giao thức truyền tải HTTP như:

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

Câu trả lời của patthoyts bên dưới sẽ được hỗ trợ chính thức trong git 2.7 (tháng 12 năm 2015): stackoverflow.com/a/34118102/6309
VonC

Câu trả lời:


146

Tôi đã thử nghiệm với proxy Git 1.8.2 và SOCKS v5, cài đặt sau phù hợp với tôi:

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

CẬP NHẬT 2017-3-31:

Theo tài liệu , mặc dù có tên , nó sẽ hoạt động cho cả url kho lưu trữ HTTP và HTTPS. Cảm ơn @ người dùng đã chỉ ra điều này.http.proxy

CẬP NHẬT 2018-11-27:

Để tắt proxy, hãy chạy lệnh:

git config --global --unset http.proxy

CHỈNH SỬA 2019-03-04:

Nếu bạn cũng muốn tên máy chủ được phân giải bằng proxy, hãy sử dụng giải pháp của thuzhf bên dưới, sử dụng socks5hthay vìsocks5


3
brantyoung, Cảm ơn bạn! Tôi quên thanh toán kết nối internet và không có kết nối bên ngoài. Tôi đã sử dụng một máy chủ khác làm cổng kết nối với: ssh -D 4000 <user> @server -p <port> và không thể tải dự án lên github qua: git config http.proxy'ocking5: // localhost: 4000 '. Cảm ơn bạn.

Tôi sẽ nhận được tiền và tôi sẽ trả cho internet :), vì dự án gần như đã sẵn sàng :)

1
Làm cách nào để bỏ đặt? tôi có đặt thành '' không?
briankip

2
@briankip mở ~/.gitconfigvà xóa [https.proxy][http.proxy]các phần của nó là một initệp, hãy chỉnh sửa nó.
Yang.Y

3
@briankip, tôi nghĩ bạn chỉ có thể đặt nó trên dòng lệnh thay vì vĩnh viễn trong cấu hình của bạn, ví dụ: git -c http.proxy=socks5://127.0.0.1:7070hoặc một cái gì đó tương tự. Có lẽ bạn có thể làm cho một bí danh gitsockscho rằng, điều này sẽ cho phép bạn dễ dàng gọi git có và không có vớ như desired`
Aaron McDaid

49

Nếu bạn không muốn đặt proxy làm cấu hình chung, hãy thử ALL_PROXY=ví dụ:

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

1
Cảm ơn bạn! điều này thực sự giúp ích cho tôi trong khi toàn cầu thì không.
redreamality

1
Cảm ơn bạn! CÔNG VIỆC THỰC SỰ!
Smoothdvd

44

(Chỉ cần nhắc nhở một chút) Nếu bạn muốn tên máy chủ cũng được proxy phân giải (có nghĩa là chuyển mọi thứ qua proxy ), đặc biệt khi bạn đang sao chép ý chính , bạn có thể sử dụng cài đặt sau (điều quan trọng là nó sử dụng vớ5h thay thế của tất5 ):

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

15

Tôi sử dụng lệnh sau để sao chép một kho lưu trữ cụ thể từ proxy vớ5. Cài đặt proxy được chỉ định với --configtùy chọn.

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

Đây là giải pháp duy nhất phù hợp với tôi, kết hợp với 'ssh -D xxx'
Tiana987642

7

Lưu ý: bản vá ở đây đã được áp dụng cho git vào năm 2015 cho phiên bản 2.4.11. Kể từ thời điểm đó, bạn chỉ có thể sử dụng vớ: // urls với cài đặt cấu hình http.proxy.

Đối với giao thức git: //, chúng tôi có Sử dụng Git với proxy SOCKS . Tuy nhiên, có vẻ như git không hỗ trợ đúng proxy cho vớ. bản thân git được liên kết với libcurl. Vì vậy, tệp .curlrc không được sử dụng (chỉ dành cho máy khách dòng lệnh curl). Tuy nhiên, bản vá sau cung cấp những hỗ trợ cần thiết. Với bản vá này được áp dụng cho git, chúng tôi có thể chỉ cần đặt biến môi trường ALL_PROXY hoặc HTTP_PROXY hoặc HTTPS_PROXY thành socks://hostname:portnum(hoặc vớ4 / vớ5) hoặc thực sự là cài đặt cấu hình http.proxy git và libcurl giờ sẽ thực sự sử dụng giao thức vớ khi sử dụng proxy.

Ví dụ, một dấu vết hoạt động:

$ 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 ...

Bản vá cần thiết:

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;

Giống như tôi đã viết, tôi đã thành công trong việc định cấu hình git để sử dụng proxy tất cho truyền tải GIT. Những gì tôi muốn là sử dụng git với một proxy vớ cho HTTP (S) giao thông
Yves Blusseau

3

Chỉ cần tham chiếu đến @briankip và xóa cài đặt proxy http như Yang.Y đã đề cập, bạn có thể chỉnh sửa trực tiếp tệp ini.

Bạn cũng có thể thực hiện việc này trên dòng lệnh bằng cách sử dụng

git config --global --unset http.proxy

Để xác nhận nó đã bị xóa, hãy liệt kê cấu hình hiện tại sử dụng

git config --list


1

Không có phương pháp nào được đề xuất phù hợp với tôi, vì vậy tôi đã tìm thấy một cách tiếp cận khác như hướng dẫn sau:


  1. Tạo một đường hầm (chuyển tiếp cổng động) qua SOCKS5giao thức bằng cách sử dụng ssh:
    ssh -ND 9994 user@YourSshServer

  1. Cài đặt proxychainstrên máy chủ cục bộ của bạn, không phải máy chủ ssh mà bạn đã kết nối:

  1. Chỉnh sửa proxychainstệp cấu hình của bạn :
    sudo nano /etc/proxychains.confsau đó thêm dòng sau vào cuối tệp:
    socks5 127.0.0.1 9994

  1. Bây giờ chúng ta đã sẵn sàng để thực hiện một gitlệnh ( proxychainsphải được đặt trước lệnh):
    proxychains git push origin develop
Khi sử dụng trang web của chúng tôi, bạn xác nhận rằng bạn đã đọc và hiểu Chính sách cookieChính sách bảo mật của chúng tôi.
Licensed under cc by-sa 3.0 with attribution required.